From bfdb1d8426183e12c38403870fae3a2318100482 Mon Sep 17 00:00:00 2001 From: Denis Arh Date: Thu, 27 Aug 2020 14:31:49 +0200 Subject: [PATCH] OpenAPI docs --- Makefile | 5 +- docs/README.adoc | 17 + docs/compose.yaml | 1931 ++++++++++++++++++++++++++++++++++++++ docs/compose/README.md | 1178 ----------------------- docs/index.html | 63 ++ docs/messaging.yaml | 932 ++++++++++++++++++ docs/messaging/README.md | 774 --------------- docs/static.go | 6 + docs/system.yaml | 1781 +++++++++++++++++++++++++++++++++++ docs/system/README.md | 1448 ---------------------------- pkg/api/docs.go | 18 + pkg/api/server/docs.go | 18 + pkg/api/server/server.go | 3 + 13 files changed, 4773 insertions(+), 3401 deletions(-) create mode 100644 docs/README.adoc create mode 100644 docs/compose.yaml delete mode 100644 docs/compose/README.md create mode 100644 docs/index.html create mode 100644 docs/messaging.yaml delete mode 100644 docs/messaging/README.md create mode 100644 docs/static.go create mode 100644 docs/system.yaml delete mode 100644 docs/system/README.md create mode 100644 pkg/api/docs.go create mode 100644 pkg/api/server/docs.go diff --git a/Makefile b/Makefile index e6ef45494..80c6f4459 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: pack build help qa critic vet codegen provision +.PHONY: pack build help qa critic vet codegen provision docs GO = go GOGET = $(GO) get -u @@ -159,6 +159,9 @@ clean.codegen: provision: $(MAKE) --directory=provision clean all +docs: $(STATIK) + $(STATIK) -p docs -m -Z -f -src=./docs + ####################################################################################################################### # Quality Assurance diff --git a/docs/README.adoc b/docs/README.adoc new file mode 100644 index 000000000..98fff987c --- /dev/null +++ b/docs/README.adoc @@ -0,0 +1,17 @@ +# Corteza API documentation + +WARNING: Work in progress + +This is the first step in migration towards full OpenAPI standards support.` + +## Original/starting state (pre `2020.9`; deprecated): +Home-brew API definition format in JSON, still available under `api/*/spec.json`. +This is still needed for controller/request/handler codegens. Documentation generators are disabled. + +## Current state (`2020.9`) +In branch `2020.12.x` we're experimenting with first step toward conversion to OpenAPI 3.0 YAML files for API +definition. There is a converter available in https://github.com/cortezaproject/openapi3-converter[cortezaproject/openapi3-converter] +that takes those custom YAML files and converts them to OpenAPI format. + +## Goal (target `2020.12`) +Generate HTTP handlers and all auxilary code and documentation from YAML files in OpenAPI 3.0 format diff --git a/docs/compose.yaml b/docs/compose.yaml new file mode 100644 index 000000000..32fea4e42 --- /dev/null +++ b/docs/compose.yaml @@ -0,0 +1,1931 @@ +openapi: 3.0.0 +info: + title: Corteza compose API + description: Corteza compose REST API definition + version: 2020.12 + contact: + email: info@cortezaproject.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +paths: + /namespace/: + get: + tags: + - Namespaces + summary: List namespaces + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: &ref_0 + type: string + - in: query + name: slug + description: Search by namespace slug + required: false + schema: *ref_0 + - in: query + name: limit + description: Limit + required: false + schema: &ref_5 + type: string + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_0 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_0 + post: + tags: + - Namespaces + summary: Create namespace + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_1 + name: + type: string + description: Name + slug: + type: string + description: Slug (url path part) + enabled: + type: boolean + description: Enabled + meta: + type: string + format: json + description: Meta data + required: + - name + - meta + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_1 + '/namespace/{namespaceID}': + get: + tags: + - Namespaces + summary: Read namespace + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: ID + required: true + schema: &ref_2 + type: string + post: + tags: + - Namespaces + summary: Update namespace + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_3 + name: + type: string + description: Name + slug: + type: string + description: Slug (url path part) + enabled: + type: boolean + description: Enabled + meta: + type: string + format: json + description: Meta data + updatedAt: + type: string + format: date-time + description: Last update (or creation) date + required: + - name + - meta + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_3 + delete: + tags: + - Namespaces + summary: Delete namespace + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/trigger': + post: + tags: + - Namespaces + summary: 'Fire compose:namespace trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_4 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_4 + '/namespace/{namespaceID}/page/': + get: + tags: + - Pages + summary: List available pages + responses: + '200': + description: OK + parameters: + - in: query + name: selfID + description: Parent page ID + required: false + schema: *ref_2 + - in: query + name: query + description: Search query + required: false + schema: *ref_0 + - in: query + name: handle + description: Search by handle + required: false + schema: *ref_0 + - in: query + name: limit + description: Limit + required: false + schema: *ref_5 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_0 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + post: + tags: + - Pages + summary: Create page + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_6 + selfID: + type: string + description: Parent Page ID + moduleID: + type: string + description: Module ID + title: + type: string + description: Title + handle: + type: string + description: Handle + description: + type: string + description: Description + weight: + type: integer + description: Page tree weight + visible: + type: boolean + description: Visible in navigation + blocks: + type: string + format: json + description: Blocks JSON + required: + - title + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_6 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/page/{pageID}': + get: + tags: + - Pages + summary: Get page details + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: pageID + description: Page ID + required: true + schema: *ref_2 + post: + tags: + - Pages + summary: Update page + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: pageID + description: Page ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_7 + selfID: + type: string + description: Parent Page ID + moduleID: + type: string + description: Module ID (optional) + title: + type: string + description: Title + handle: + type: string + description: Handle + description: + type: string + description: Description + weight: + type: integer + description: Page tree weight + visible: + type: boolean + description: Visible in navigation + blocks: + type: string + format: json + description: Blocks JSON + required: + - title + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_7 + delete: + tags: + - Pages + summary: Delete page + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: pageID + description: Page ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/page/tree': + get: + tags: + - Pages + summary: 'Get page all (non-record) pages, hierarchically' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/page/{selfID}/reorder': + post: + tags: + - Pages + summary: Reorder pages + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: selfID + description: Parent page ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_8 + pageIDs: + type: array + items: *ref_0 + description: Page ID order + required: + - pageIDs + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_8 + '/namespace/{namespaceID}/page/{pageID}/attachment': + post: + tags: + - Pages + summary: Uploads attachment to page + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: pageID + description: Page ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_9 + upload: + type: string + format: binary + description: File to upload + required: + - upload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_9 + '/namespace/{namespaceID}/page/{pageID}/trigger': + post: + tags: + - Pages + summary: 'Fire compose:page trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: pageID + description: Page ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_10 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_10 + '/namespace/{namespaceID}/module/': + get: + tags: + - Modules + summary: List modules + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: *ref_0 + - in: query + name: name + description: Search by name + required: false + schema: *ref_0 + - in: query + name: handle + description: Search by handle + required: false + schema: *ref_0 + - in: query + name: limit + description: Limit + required: false + schema: *ref_5 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_0 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + post: + tags: + - Modules + summary: Create module + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_11 + name: + type: string + description: Module Name + handle: + type: string + description: Module handle + fields: + type: array + items: &ref_12 + type: object + properties: + fieldID: + type: string + format: uuid + name: + type: string + kind: + type: string + label: + type: string + defaultValue: + type: array + items: + type: string + maxLength: + type: integer + isRequired: + type: boolean + isPrivate: + type: boolean + isMulti: + type: boolean + isSystem: + type: boolean + options: + type: object + description: Fields JSON + meta: + type: string + format: json + description: Module meta data + required: + - name + - fields + - meta + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_11 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}': + get: + tags: + - Modules + summary: Read module + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + post: + tags: + - Modules + summary: Update module + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_13 + name: + type: string + description: Module Name + handle: + type: string + description: Module Handle + fields: + type: array + items: *ref_12 + description: Fields JSON + meta: + type: string + format: json + description: Module meta data + updatedAt: + type: string + format: date-time + description: Last update (or creation) date + required: + - name + - fields + - meta + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_13 + delete: + tags: + - Modules + summary: Delete module + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/trigger': + post: + tags: + - Modules + summary: 'Fire compose:module trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_14 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_14 + '/namespace/{namespaceID}/module/{moduleID}/record/report': + get: + tags: + - Records + summary: Generates report from module records + responses: + '200': + description: OK + parameters: + - in: query + name: metrics + description: 'Metrics (eg: ''SUM(money), MAX(calls)'')' + required: false + schema: *ref_0 + - in: query + name: dimensions + description: 'Dimensions (eg: ''DATE(foo), status'')' + required: true + schema: *ref_0 + - in: query + name: filter + description: 'Filter (eg: ''DATE(foo) > 2010'')' + required: false + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/': + get: + tags: + - Records + summary: List/read records from module section + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Record filtering query + required: false + schema: *ref_0 + - in: query + name: filter + description: 'Filtering condition (same as query, deprecated)' + required: false + schema: *ref_0 + - in: query + name: deleted + description: 'Exclude (0, default), include (1) or return only (2) deleted records' + required: false + schema: *ref_5 + - in: query + name: limit + description: Limit + required: false + schema: *ref_5 + - in: query + name: offset + description: Offset + required: false + schema: *ref_5 + - in: query + name: page + description: Page number (1-based) + required: false + schema: *ref_5 + - in: query + name: perPage + description: Returned items per page (default 50) + required: false + schema: *ref_5 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + post: + tags: + - Records + summary: Create record in module section + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_15 + values: + type: array + items: &ref_20 + type: object + properties: + name: + type: string + value: + type: string + description: Record values + records: + type: array + items: &ref_21 + type: object + properties: + recordID: + type: string + format: uuid + moduleID: + type: string + format: uuid + namespaceID: + type: string + format: uuid + values: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + deletedAt: + type: string + format: date-time + ownedBy: + type: string + format: uuid + createdBy: + type: string + format: uuid + updatedBy: + type: string + format: uuid + deletedBy: + type: string + format: uuid + description: Records + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_15 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + delete: + tags: + - Records + summary: Delete record row from module section + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_16 + recordIDs: + type: array + items: *ref_0 + description: IDs of records to delete + truncate: + type: boolean + description: >- + Remove ALL records of a specified module (pending + implementation) + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_16 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/import': + post: + tags: + - Records + summary: Initiate record import session + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_17 + upload: + type: string + format: binary + description: File import + required: + - upload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_17 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}': + patch: + tags: + - Records + summary: Run record import + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: sessionID + description: Import session + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_18 + fields: + type: string + format: json + description: Fields defined by import file + onError: + type: string + description: What happens if record fails to import + required: + - fields + - onError + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_18 + get: + tags: + - Records + summary: Get import progress + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: sessionID + description: Import session + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}': + get: + tags: + - Records + summary: 'Exports records that match ' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: filename + description: Filename to use + required: true + schema: *ref_0 + - in: path + name: ext + description: Export format + required: true + schema: *ref_0 + - in: query + name: filter + description: Filtering condition + required: false + schema: *ref_0 + - in: query + name: fields + description: Fields to export + required: true + schema: + type: array + items: *ref_0 + - in: query + name: timezone + description: Convert times to this timezone + required: false + schema: *ref_0 + '/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}': + post: + tags: + - Records + summary: Executes server-side procedure over one or more module records + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: procedure + description: Name of procedure to execute + required: true + schema: *ref_0 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_19 + args: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + description: Procedure arguments + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_19 + '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}': + get: + tags: + - Records + summary: Read records by ID from module section + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: recordID + description: Record ID + required: true + schema: *ref_2 + post: + tags: + - Records + summary: Update records in module section + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: recordID + description: Record ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_22 + values: + type: array + items: *ref_20 + description: Record values + records: + type: array + items: *ref_21 + description: Records + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_22 + delete: + tags: + - Records + summary: Delete record row from module section + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: recordID + description: Record ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/attachment': + post: + tags: + - Records + summary: Uploads attachment and validates it against record field requirements + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_23 + recordID: + type: string + description: Record ID + fieldName: + type: string + description: Field name + upload: + type: string + format: binary + description: File to upload + required: + - fieldName + - upload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_23 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger': + post: + tags: + - Records + summary: 'Fire compose:record trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + - in: path + name: recordID + description: ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_24 + script: + type: string + description: Script to execute + values: + type: array + items: *ref_20 + description: Record values + required: + - script + - values + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_24 + '/namespace/{namespaceID}/module/{moduleID}/record/trigger': + post: + tags: + - Records + summary: 'Fire compose:record trigger' + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_25 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_25 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: moduleID + description: Module ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/chart/': + get: + tags: + - Charts + summary: List/read charts + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query to match against charts + required: false + schema: *ref_0 + - in: query + name: handle + description: Search charts by handle + required: false + schema: *ref_0 + - in: query + name: limit + description: Limit + required: false + schema: *ref_5 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_0 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + post: + tags: + - Charts + summary: 'List/read charts ' + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_26 + config: + type: string + format: json + description: Chart JSON + name: + type: string + description: Chart name + handle: + type: string + description: Chart handle + required: + - config + - name + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_26 + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/chart/{chartID}': + get: + tags: + - Charts + summary: Read charts by ID + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: chartID + description: Chart ID + required: true + schema: *ref_2 + post: + tags: + - Charts + summary: Add/update charts + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: chartID + description: Chart ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_27 + config: + type: string + format: json + description: Chart JSON + name: + type: string + description: Chart name + handle: + type: string + description: Chart handle + updatedAt: + type: string + format: date-time + description: Last update (or creation) date + required: + - config + - name + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_27 + delete: + tags: + - Charts + summary: Delete chart + responses: + '200': + description: OK + parameters: + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: chartID + description: Chart ID + required: true + schema: *ref_2 + /notification/email: + post: + tags: + - Notifications + summary: Send email from the Compose + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_28 + to: + type: array + items: *ref_0 + description: Email addresses + cc: + type: array + items: *ref_0 + description: Email addresses + replyTo: + type: string + description: Email address in reply-to field + subject: + type: string + description: Email subject + content: + type: string + format: json + description: Message content + remoteAttachments: + type: array + items: *ref_0 + description: Remote files to attach to the email + required: + - to + - content + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_28 + '/namespace/{namespaceID}/attachment/{kind}/': + get: + tags: + - Attachments + summary: 'List, filter all page attachments' + responses: + '200': + description: OK + parameters: + - in: query + name: sign + description: Signature + required: false + schema: *ref_0 + - in: query + name: userID + description: User ID + required: false + schema: *ref_2 + - in: query + name: pageID + description: Filter attachments by page ID + required: false + schema: *ref_2 + - in: query + name: moduleID + description: Filter attachments by module ID + required: false + schema: *ref_2 + - in: query + name: recordID + description: Filter attachments by record ID + required: false + schema: *ref_2 + - in: query + name: fieldName + description: Filter attachments by field name + required: false + schema: *ref_0 + - in: query + name: limit + description: Limit + required: false + schema: *ref_5 + - in: query + name: offset + description: Offset + required: false + schema: *ref_5 + - in: query + name: page + description: Page number (1-based) + required: false + schema: *ref_5 + - in: query + name: perPage + description: Returned items per page (default 50) + required: false + schema: *ref_5 + - in: path + name: kind + description: Attachment kind + required: true + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}': + get: + tags: + - Attachments + summary: Attachment details + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Attachment kind + required: true + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_2 + - in: query + name: sign + description: Signature + required: false + schema: *ref_0 + - in: query + name: userID + description: User ID + required: false + schema: *ref_2 + delete: + tags: + - Attachments + summary: Delete attachment + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Attachment kind + required: true + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_2 + - in: query + name: sign + description: Signature + required: false + schema: *ref_0 + - in: query + name: userID + description: User ID + required: false + schema: *ref_2 + '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}': + get: + tags: + - Attachments + summary: Serves attached file + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Attachment kind + required: true + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_2 + - in: path + name: name + description: File name + required: true + schema: *ref_0 + - in: query + name: sign + description: Signature + required: false + schema: *ref_0 + - in: query + name: userID + description: User ID + required: false + schema: *ref_2 + - in: query + name: download + description: Force file download + required: false + schema: &ref_30 + type: boolean + '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}': + get: + tags: + - Attachments + summary: Serves preview of an attached file + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Attachment kind + required: true + schema: *ref_0 + - in: path + name: namespaceID + description: Namespace ID + required: true + schema: *ref_2 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_2 + - in: path + name: ext + description: Preview extension/format + required: true + schema: *ref_0 + - in: query + name: sign + description: Signature + required: false + schema: *ref_0 + - in: query + name: userID + description: User ID + required: false + schema: *ref_2 + /permissions/: + get: + tags: + - Permissions + summary: Retrieve defined permissions + responses: + '200': + description: OK + /permissions/effective: + get: + tags: + - Permissions + summary: Effective rules for current user + responses: + '200': + description: OK + parameters: + - in: query + name: resource + description: Show only rules for a specific resource + required: false + schema: *ref_0 + '/permissions/{roleID}/rules': + get: + tags: + - Permissions + summary: Retrieve role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_2 + delete: + tags: + - Permissions + summary: Remove all defined role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_2 + patch: + tags: + - Permissions + summary: Update permission settings + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_29 + rules: + type: array + items: + type: object + properties: + roleID: + type: string + format: uuid + resource: + type: string + operation: + type: string + access: + type: string + description: List of permission rules to set + required: + - rules + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_29 + /automation/: + get: + tags: + - Compose automation scripts + summary: List all available automation scripts for compose resources + responses: + '200': + description: OK + parameters: + - in: query + name: resourceTypePrefixes + description: Filter by resource prefix + required: false + schema: + type: array + items: *ref_0 + - in: query + name: resourceTypes + description: Filter by resource type + required: false + schema: + type: array + items: *ref_0 + - in: query + name: eventTypes + description: Filter by event type + required: false + schema: + type: array + items: *ref_0 + - in: query + name: excludeInvalid + description: Exclude scripts that can not be used (errors) + required: false + schema: *ref_30 + - in: query + name: excludeClientScripts + description: Do not include client scripts + required: false + schema: *ref_30 + - in: query + name: excludeServerScripts + description: Do not include server scripts + required: false + schema: *ref_30 + '/automation/{bundle}-{type}.{ext}': + get: + tags: + - Compose automation scripts + summary: Serves client scripts bundle + responses: + '200': + description: OK + parameters: + - in: path + name: bundle + description: Name of the bundle + required: true + schema: *ref_0 + - in: path + name: type + description: Bundle type + required: true + schema: *ref_0 + - in: path + name: ext + description: Bundle extension + required: true + schema: *ref_0 + /automation/trigger: + post: + tags: + - Compose automation scripts + summary: Triggers execution of a specific script on a system service level + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_31 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_31 diff --git a/docs/compose/README.md b/docs/compose/README.md deleted file mode 100644 index 1ad88b539..000000000 --- a/docs/compose/README.md +++ /dev/null @@ -1,1178 +0,0 @@ -# Attachments - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/{namespaceID}/attachment/{kind}/` | List, filter all page attachments | -| `GET` | `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}` | Attachment details | -| `DELETE` | `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}` | Delete attachment | -| `GET` | `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}` | Serves attached file | -| `GET` | `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}` | Serves preview of an attached file | - -## List, filter all page attachments - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/attachment/{kind}/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | GET | Filter attachments by page ID | N/A | NO | -| moduleID | uint64 | GET | Filter attachments by module ID | N/A | NO | -| recordID | uint64 | GET | Filter attachments by record ID | N/A | NO | -| fieldName | string | GET | Filter attachments by field name | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | -| kind | string | PATH | Attachment kind | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Attachment details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| kind | string | PATH | Attachment kind | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - -## Delete attachment - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| kind | string | PATH | Attachment kind | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - -## Serves attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| download | bool | GET | Force file download | N/A | NO | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| name | string | PATH | File name | N/A | YES | -| kind | string | PATH | Attachment kind | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Serves preview of an attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| ext | string | PATH | Preview extension/format | N/A | YES | -| kind | string | PATH | Attachment kind | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - ---- - - - - -# Compose automation scripts - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/automation/` | List all available automation scripts for compose resources | -| `GET` | `/automation/{bundle}-{type}.{ext}` | Serves client scripts bundle | -| `POST` | `/automation/trigger` | Triggers execution of a specific script on a system service level | - -## List all available automation scripts for compose resources - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resourceTypePrefixes | []string | GET | Filter by resource prefix | N/A | NO | -| resourceTypes | []string | GET | Filter by resource type | N/A | NO | -| eventTypes | []string | GET | Filter by event type | N/A | NO | -| excludeInvalid | bool | GET | Exclude scripts that can not be used (errors) | N/A | NO | -| excludeClientScripts | bool | GET | Do not include client scripts | N/A | NO | -| excludeServerScripts | bool | GET | Do not include server scripts | N/A | NO | - -## Serves client scripts bundle - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/{bundle}-{type}.{ext}` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| bundle | string | PATH | Name of the bundle | N/A | NO | -| type | string | PATH | Bundle type | N/A | NO | -| ext | string | PATH | Bundle extension | N/A | NO | - -## Triggers execution of a specific script on a system service level - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/trigger` | HTTP/S | POST | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Charts - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/{namespaceID}/chart/` | List/read charts | -| `POST` | `/namespace/{namespaceID}/chart/` | List/read charts | -| `GET` | `/namespace/{namespaceID}/chart/{chartID}` | Read charts by ID | -| `POST` | `/namespace/{namespaceID}/chart/{chartID}` | Add/update charts | -| `DELETE` | `/namespace/{namespaceID}/chart/{chartID}` | Delete chart | - -## List/read charts - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/chart/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query to match against charts | N/A | NO | -| handle | string | GET | Search charts by handle | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## List/read charts - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/chart/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| config | sqlxTypes.JSONText | POST | Chart JSON | N/A | YES | -| name | string | POST | Chart name | N/A | YES | -| handle | string | POST | Chart handle | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Read charts by ID - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/chart/{chartID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| chartID | uint64 | PATH | Chart ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Add/update charts - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/chart/{chartID}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| chartID | uint64 | PATH | Chart ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| config | sqlxTypes.JSONText | POST | Chart JSON | N/A | YES | -| name | string | POST | Chart name | N/A | YES | -| handle | string | POST | Chart handle | N/A | NO | -| updatedAt | *time.Time | POST | Last update (or creation) date | N/A | NO | - -## Delete chart - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/chart/{chartID}` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| chartID | uint64 | PATH | Chart ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - ---- - - - - -# Modules - -Compose module definitions - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/{namespaceID}/module/` | List modules | -| `POST` | `/namespace/{namespaceID}/module/` | Create module | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}` | Read module | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}` | Update module | -| `DELETE` | `/namespace/{namespaceID}/module/{moduleID}` | Delete module | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/trigger` | Fire compose:module trigger | - -## List modules - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query | N/A | NO | -| name | string | GET | Search by name | N/A | NO | -| handle | string | GET | Search by handle | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Create module - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Module Name | N/A | YES | -| handle | string | POST | Module handle | N/A | NO | -| fields | types.ModuleFieldSet | POST | Fields JSON | N/A | YES | -| meta | sqlxTypes.JSONText | POST | Module meta data | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Read module - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Update module - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| name | string | POST | Module Name | N/A | YES | -| handle | string | POST | Module Handle | N/A | NO | -| fields | types.ModuleFieldSet | POST | Fields JSON | N/A | YES | -| meta | sqlxTypes.JSONText | POST | Module meta data | N/A | YES | -| updatedAt | *time.Time | POST | Last update (or creation) date | N/A | NO | - -## Delete module - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Fire compose:module trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| moduleID | uint64 | PATH | ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Namespaces - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/` | List namespaces | -| `POST` | `/namespace/` | Create namespace | -| `GET` | `/namespace/{namespaceID}` | Read namespace | -| `POST` | `/namespace/{namespaceID}` | Update namespace | -| `DELETE` | `/namespace/{namespaceID}` | Delete namespace | -| `POST` | `/namespace/{namespaceID}/trigger` | Fire compose:namespace trigger | - -## List namespaces - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query | N/A | NO | -| slug | string | GET | Search by namespace slug | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | - -## Create namespace - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Name | N/A | YES | -| slug | string | POST | Slug (url path part) | N/A | NO | -| enabled | bool | POST | Enabled | N/A | NO | -| meta | sqlxTypes.JSONText | POST | Meta data | N/A | YES | - -## Read namespace - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| namespaceID | uint64 | PATH | ID | N/A | YES | - -## Update namespace - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| namespaceID | uint64 | PATH | ID | N/A | YES | -| name | string | POST | Name | N/A | YES | -| slug | string | POST | Slug (url path part) | N/A | NO | -| enabled | bool | POST | Enabled | N/A | NO | -| meta | sqlxTypes.JSONText | POST | Meta data | N/A | YES | -| updatedAt | *time.Time | POST | Last update (or creation) date | N/A | NO | - -## Delete namespace - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| namespaceID | uint64 | PATH | ID | N/A | YES | - -## Fire compose:namespace trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| namespaceID | uint64 | PATH | ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Notifications - -Compose Notifications - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `POST` | `/notification/email` | Send email from the Compose | - -## Send email from the Compose - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/notification/email` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| to | []string | POST | Email addresses | N/A | YES | -| cc | []string | POST | Email addresses | N/A | NO | -| replyTo | string | POST | Email address in reply-to field | N/A | NO | -| subject | string | POST | Email subject | N/A | NO | -| content | sqlxTypes.JSONText | POST | Message content | N/A | YES | -| remoteAttachments | []string | POST | Remote files to attach to the email | N/A | NO | - ---- - - - - -# Pages - -Compose pages - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/{namespaceID}/page/` | List available pages | -| `POST` | `/namespace/{namespaceID}/page/` | Create page | -| `GET` | `/namespace/{namespaceID}/page/{pageID}` | Get page details | -| `GET` | `/namespace/{namespaceID}/page/tree` | Get page all (non-record) pages, hierarchically | -| `POST` | `/namespace/{namespaceID}/page/{pageID}` | Update page | -| `POST` | `/namespace/{namespaceID}/page/{selfID}/reorder` | Reorder pages | -| `Delete` | `/namespace/{namespaceID}/page/{pageID}` | Delete page | -| `POST` | `/namespace/{namespaceID}/page/{pageID}/attachment` | Uploads attachment to page | -| `POST` | `/namespace/{namespaceID}/page/{pageID}/trigger` | Fire compose:page trigger | - -## List available pages - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| selfID | uint64 | GET | Parent page ID | N/A | NO | -| query | string | GET | Search query | N/A | NO | -| handle | string | GET | Search by handle | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Create page - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| selfID | uint64 | POST | Parent Page ID | N/A | NO | -| moduleID | uint64 | POST | Module ID | N/A | NO | -| title | string | POST | Title | N/A | YES | -| handle | string | POST | Handle | N/A | NO | -| description | string | POST | Description | N/A | NO | -| weight | int | POST | Page tree weight | N/A | NO | -| visible | bool | POST | Visible in navigation | N/A | NO | -| blocks | sqlxTypes.JSONText | POST | Blocks JSON | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Get page details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{pageID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | PATH | Page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Get page all (non-record) pages, hierarchically - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/tree` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Update page - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{pageID}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | PATH | Page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| selfID | uint64 | POST | Parent Page ID | N/A | NO | -| moduleID | uint64 | POST | Module ID (optional) | N/A | NO | -| title | string | POST | Title | N/A | YES | -| handle | string | POST | Handle | N/A | NO | -| description | string | POST | Description | N/A | NO | -| weight | int | POST | Page tree weight | N/A | NO | -| visible | bool | POST | Visible in navigation | N/A | NO | -| blocks | sqlxTypes.JSONText | POST | Blocks JSON | N/A | NO | - -## Reorder pages - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{selfID}/reorder` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| selfID | uint64 | PATH | Parent page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| pageIDs | []string | POST | Page ID order | N/A | YES | - -## Delete page - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{pageID}` | HTTP/S | Delete | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | PATH | Page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | - -## Uploads attachment to page - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{pageID}/attachment` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | PATH | Page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| upload | *multipart.FileHeader | POST | File to upload | N/A | YES | - -## Fire compose:page trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/page/{pageID}/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| pageID | uint64 | PATH | Page ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Permissions - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/permissions/` | Retrieve defined permissions | -| `GET` | `/permissions/effective` | Effective rules for current user | -| `GET` | `/permissions/{roleID}/rules` | Retrieve role permissions | -| `DELETE` | `/permissions/{roleID}/rules` | Remove all defined role permissions | -| `PATCH` | `/permissions/{roleID}/rules` | Update permission settings | - -## Retrieve defined permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Effective rules for current user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/effective` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resource | string | GET | Show only rules for a specific resource | N/A | NO | - -## Retrieve role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Remove all defined role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Update permission settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | PATCH | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| rules | permissions.RuleSet | POST | List of permission rules to set | N/A | YES | - ---- - - - - -# Records - -Compose records - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}/record/report` | Generates report from module records | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}/record/` | List/read records from module section | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/import` | Initiate record import session | -| `PATCH` | `/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}` | Run record import | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}` | Get import progress | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}` | Exports records that match | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}` | Executes server-side procedure over one or more module records | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/` | Create record in module section | -| `GET` | `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | Read records by ID from module section | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | Update records in module section | -| `DELETE` | `/namespace/{namespaceID}/module/{moduleID}/record/` | Delete record row from module section | -| `DELETE` | `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | Delete record row from module section | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/attachment` | Uploads attachment and validates it against record field requirements | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger` | Fire compose:record trigger | -| `POST` | `/namespace/{namespaceID}/module/{moduleID}/record/trigger` | Fire compose:record trigger | - -## Generates report from module records - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/report` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| metrics | string | GET | Metrics (eg: 'SUM(money), MAX(calls)') | N/A | NO | -| dimensions | string | GET | Dimensions (eg: 'DATE(foo), status') | N/A | YES | -| filter | string | GET | Filter (eg: 'DATE(foo) > 2010') | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## List/read records from module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Record filtering query | N/A | NO | -| filter | string | GET | Filtering condition (same as query, deprecated) | N/A | NO | -| deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted records | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Initiate record import session - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/import` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| upload | *multipart.FileHeader | POST | File import | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Run record import - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}` | HTTP/S | PATCH | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| sessionID | uint64 | PATH | Import session | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| fields | json.RawMessage | POST | Fields defined by import file | N/A | YES | -| onError | string | POST | What happens if record fails to import | N/A | YES | - -## Get import progress - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| sessionID | uint64 | PATH | Import session | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Exports records that match - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| filter | string | GET | Filtering condition | N/A | NO | -| fields | []string | GET | Fields to export | N/A | YES | -| timezone | string | GET | Convert times to this timezone | N/A | NO | -| filename | string | PATH | Filename to use | N/A | NO | -| ext | string | PATH | Export format | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Executes server-side procedure over one or more module records - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| procedure | string | PATH | Name of procedure to execute | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| args | []ProcedureArg | POST | Procedure arguments | N/A | NO | - -## Create record in module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| values | types.RecordValueSet | POST | Record values | N/A | NO | -| records | types.RecordBulkSet | POST | Records | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Read records by ID from module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordID | uint64 | PATH | Record ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Update records in module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordID | uint64 | PATH | Record ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| values | types.RecordValueSet | POST | Record values | N/A | NO | -| records | types.RecordBulkSet | POST | Records | N/A | NO | - -## Delete record row from module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordIDs | []string | POST | IDs of records to delete | N/A | NO | -| truncate | bool | POST | Remove ALL records of a specified module (pending implementation) | N/A | NO | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Delete record row from module section - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordID | uint64 | PATH | Record ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Uploads attachment and validates it against record field requirements - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/attachment` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordID | uint64 | POST | Record ID | N/A | NO | -| fieldName | string | POST | Field name | N/A | YES | -| upload | *multipart.FileHeader | POST | File to upload | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - -## Fire compose:record trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| recordID | uint64 | PATH | ID | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | -| values | types.RecordValueSet | POST | Record values | N/A | YES | - -## Fire compose:record trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/namespace/{namespaceID}/module/{moduleID}/record/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| script | string | POST | Script to execute | N/A | YES | -| namespaceID | uint64 | PATH | Namespace ID | N/A | YES | -| moduleID | uint64 | PATH | Module ID | N/A | YES | - ---- - - - - -# Settings - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/settings/` | List settings | -| `PATCH` | `/settings/` | Update settings | -| `GET` | `/settings/{key}` | Get a value for a key | -| `GET` | `/settings/current` | Current compose settings | - -## List settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| prefix | string | GET | Key prefix | N/A | NO | - -## Update settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | PATCH | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| values | settings.ValueSet | POST | Array of new settings: `[{ name: ..., value: ... }]`. Omit value to remove setting | N/A | YES | - -## Get a value for a key - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/{key}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| ownerID | uint64 | GET | Owner ID | N/A | NO | -| key | string | PATH | Setting key | N/A | YES | - -## Current compose settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/current` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..2ee927d23 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,63 @@ + + + + + + Corteza Server REST API Documentation + + + + + + + +
+ + + + + + diff --git a/docs/messaging.yaml b/docs/messaging.yaml new file mode 100644 index 000000000..f074a1e35 --- /dev/null +++ b/docs/messaging.yaml @@ -0,0 +1,932 @@ +openapi: 3.0.0 +info: + title: Corteza messaging API + description: Corteza messaging REST API definition + version: 2020.12 + contact: + email: info@cortezaproject.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +paths: + /commands/: + get: + tags: + - Commands + summary: List of available commands + responses: + '200': + description: OK + /status/: + get: + tags: + - Status + summary: See all current statuses + responses: + '200': + description: OK + post: + tags: + - Status + summary: Set user's status + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_0 + icon: + type: string + description: Status icon + message: + type: string + description: Status message + expires: + type: string + description: >- + Clear status when it expires (eg: when-active, afternoon, + tomorrow 1h, 30m, 1 PM, 2019-05-20) + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_0 + delete: + tags: + - Status + summary: Clear status + responses: + '200': + description: OK + /activity/: + post: + tags: + - User activity + summary: >- + Sends user's activity to all subscribers; globally or per + channel/message. + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_1 + channelID: + type: string + description: >- + Channel ID, if set, activity will be send only to subscribed + users + messageID: + type: string + description: 'Message ID, if set, channelID must be set as well' + kind: + type: string + description: Arbitrary string + required: + - kind + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_1 + /channels/: + get: + tags: + - Channels + summary: List channels + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: &ref_2 + type: string + post: + tags: + - Channels + summary: Create new channel + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_3 + name: + type: string + description: Name of Channel + topic: + type: string + description: Subject of Channel + type: + type: string + description: Channel type + membershipPolicy: + type: string + description: 'Membership policy (eg: featured, forced)?' + members: + type: array + items: *ref_2 + description: Initial members of the channel + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_3 + '/channels/{channelID}': + put: + tags: + - Channels + summary: Update channel details + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: &ref_5 + type: string + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_4 + name: + type: string + description: Name of Channel + topic: + type: string + description: Subject of Channel + membershipPolicy: + type: string + description: 'Membership policy (eg: featured, forced)?' + type: + type: string + description: Channel type + organisationID: + type: string + description: Move channel to different organisation + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_4 + get: + tags: + - Channels + summary: Read channel details + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + '/channels/{channelID}/state': + put: + tags: + - Channels + summary: Update channel state + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_6 + state: + type: string + description: 'Valid values: delete, undelete, archive, unarchive' + required: + - state + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_6 + '/channels/{channelID}/flag': + put: + tags: + - Channels + summary: Update channel membership flag + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_7 + flag: + type: string + description: 'Valid values: pinned, hidden, ignored' + required: + - flag + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_7 + delete: + tags: + - Channels + summary: Remove channel membership flag + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + '/channels/{channelID}/members': + get: + tags: + - Channels + summary: List channel members + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + '/channels/{channelID}/members/{userID}': + put: + tags: + - Channels + summary: Join channel + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: userID + description: Member ID + required: true + schema: *ref_5 + delete: + tags: + - Channels + summary: Remove member from channel + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: userID + description: Member ID + required: true + schema: *ref_5 + '/channels/{channelID}/invite': + post: + tags: + - Channels + summary: Join channel + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_8 + userID: + type: array + items: *ref_2 + description: User ID + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_8 + '/channels/{channelID}/attach': + post: + tags: + - Channels + summary: Attach file to channel + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_9 + replyTo: + type: string + description: Upload as a reply + upload: + type: string + format: binary + description: File to upload + required: + - upload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_9 + '/channels/{channelID}/messages/': + post: + tags: + - Messages + summary: Post new message to the channel + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_10 + message: + type: string + description: Message contents (markdown) + required: + - message + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_10 + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + '/channels/{channelID}/messages/command/{command}/exec': + post: + tags: + - Messages + summary: Execute command + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: command + description: Command to be executed + required: true + schema: *ref_2 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_11 + input: + type: string + description: Arbitrary command input + params: + type: array + items: *ref_2 + description: Command parameters + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_11 + '/channels/{channelID}/messages/mark-as-read': + get: + tags: + - Messages + summary: Manages read/unread messages in a channel or a thread + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: query + name: threadID + description: 'ID of thread (messageID) ' + required: false + schema: *ref_5 + - in: query + name: lastReadMessageID + description: ID of the last read message + required: false + schema: *ref_5 + '/channels/{channelID}/messages/{messageID}': + put: + tags: + - Messages + summary: Edit existing message + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_12 + message: + type: string + description: Message contents (markdown) + required: + - message + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_12 + delete: + tags: + - Messages + summary: Delete existing message + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + '/channels/{channelID}/messages/{messageID}/replies': + post: + tags: + - Messages + summary: Reply to a message + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_13 + message: + type: string + description: Message contents (markdown) + required: + - message + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_13 + '/channels/{channelID}/messages/{messageID}/pin': + post: + tags: + - Messages + summary: Pin message to channel (public bookmark) + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + delete: + tags: + - Messages + summary: Pin message to channel (public bookmark) + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + '/channels/{channelID}/messages/{messageID}/bookmark': + post: + tags: + - Messages + summary: Bookmark a message (private bookmark) + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + delete: + tags: + - Messages + summary: Remove boomark from message (private bookmark) + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + '/channels/{channelID}/messages/{messageID}/reaction/{reaction}': + post: + tags: + - Messages + summary: React to a message + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + - in: path + name: reaction + description: Reaction + required: true + schema: *ref_2 + delete: + tags: + - Messages + summary: Delete reaction from a message + responses: + '200': + description: OK + parameters: + - in: path + name: channelID + description: Channel ID + required: true + schema: *ref_5 + - in: path + name: messageID + description: Message ID + required: true + schema: *ref_5 + - in: path + name: reaction + description: Reaction + required: true + schema: *ref_2 + '/attachment/{attachmentID}/original/{name}': + get: + tags: + - Attachments + summary: Serves attached file + responses: + '200': + description: OK + parameters: + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_5 + - in: path + name: name + description: File name + required: true + schema: *ref_2 + - in: query + name: sign + description: Signature + required: true + schema: *ref_2 + - in: query + name: userID + description: User ID + required: true + schema: *ref_5 + - in: query + name: download + description: Force file download + required: false + schema: &ref_14 + type: boolean + '/attachment/{attachmentID}/preview.{ext}': + get: + tags: + - Attachments + summary: Serves preview of an attached file + responses: + '200': + description: OK + parameters: + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_5 + - in: path + name: ext + description: Preview extension/format + required: true + schema: *ref_2 + - in: query + name: sign + description: Signature + required: true + schema: *ref_2 + - in: query + name: userID + description: User ID + required: true + schema: *ref_5 + /search/messages: + get: + tags: + - Search entry point + summary: Search for messages + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: *ref_2 + - in: query + name: channelID + description: Filter by channels + required: false + schema: + type: array + items: *ref_2 + - in: query + name: afterMessageID + description: ID of the first message in the list (exclusive) + required: false + schema: *ref_5 + - in: query + name: beforeMessageID + description: ID of the last message in the list (exclusive) + required: false + schema: *ref_5 + - in: query + name: fromMessageID + description: ID of the first message in the list (inclusive) + required: false + schema: *ref_5 + - in: query + name: toMessageID + description: ID of the last message the list (inclusive) + required: false + schema: *ref_5 + - in: query + name: threadID + description: Filter by thread message ID + required: false + schema: + type: array + items: *ref_2 + - in: query + name: userID + description: Filter by one or more user + required: false + schema: + type: array + items: *ref_2 + - in: query + name: type + description: 'Filter by message type (text, inlineImage, attachment, ...)' + required: false + schema: + type: array + items: *ref_2 + - in: query + name: pinnedOnly + description: Return only pinned messages + required: false + schema: *ref_14 + - in: query + name: bookmarkedOnly + description: Only bookmarked messages + required: false + schema: *ref_14 + - in: query + name: limit + description: Max number of messages + required: false + schema: &ref_15 + type: string + /search/threads: + get: + tags: + - Search entry point + summary: Search for threads + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: *ref_2 + - in: query + name: channelID + description: Filter by channels + required: false + schema: + type: array + items: *ref_2 + - in: query + name: limit + description: Max number of messages + required: false + schema: *ref_15 + /permissions/: + get: + tags: + - Permissions + summary: Retrieve defined permissions + responses: + '200': + description: OK + /permissions/effective: + get: + tags: + - Permissions + summary: Effective rules for current user + responses: + '200': + description: OK + parameters: + - in: query + name: resource + description: Show only rules for a specific resource + required: false + schema: *ref_2 + '/permissions/{roleID}/rules': + get: + tags: + - Permissions + summary: Retrieve role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_5 + delete: + tags: + - Permissions + summary: Remove all defined role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_5 + patch: + tags: + - Permissions + summary: Update permission settings + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_5 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_16 + rules: + type: array + items: + type: object + properties: + roleID: + type: string + format: uuid + resource: + type: string + operation: + type: string + access: + type: string + description: List of permission rules to set + required: + - rules + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_16 diff --git a/docs/messaging/README.md b/docs/messaging/README.md deleted file mode 100644 index 31f53b40f..000000000 --- a/docs/messaging/README.md +++ /dev/null @@ -1,774 +0,0 @@ -# User activity - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `POST` | `/activity/` | Sends user's activity to all subscribers; globally or per channel/message. | - -## Sends user's activity to all subscribers; globally or per channel/message. - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/activity/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | POST | Channel ID, if set, activity will be send only to subscribed users | N/A | NO | -| messageID | uint64 | POST | Message ID, if set, channelID must be set as well | N/A | NO | -| kind | string | POST | Arbitrary string | N/A | YES | - ---- - - - - -# Attachments - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/attachment/{attachmentID}/original/{name}` | Serves attached file | -| `GET` | `/attachment/{attachmentID}/preview.{ext}` | Serves preview of an attached file | - -## Serves attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{attachmentID}/original/{name}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| download | bool | GET | Force file download | N/A | NO | -| sign | string | GET | Signature | N/A | YES | -| userID | uint64 | GET | User ID | N/A | YES | -| name | string | PATH | File name | N/A | YES | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | - -## Serves preview of an attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{attachmentID}/preview.{ext}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| ext | string | PATH | Preview extension/format | N/A | YES | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| sign | string | GET | Signature | N/A | YES | -| userID | uint64 | GET | User ID | N/A | YES | - ---- - - - - -# Channels - -A channel is a representation of a sequence of messages. It has meta data like channel subject. Channels may be public, private or group. - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/channels/` | List channels | -| `POST` | `/channels/` | Create new channel | -| `PUT` | `/channels/{channelID}` | Update channel details | -| `PUT` | `/channels/{channelID}/state` | Update channel state | -| `PUT` | `/channels/{channelID}/flag` | Update channel membership flag | -| `DELETE` | `/channels/{channelID}/flag` | Remove channel membership flag | -| `GET` | `/channels/{channelID}` | Read channel details | -| `GET` | `/channels/{channelID}/members` | List channel members | -| `PUT` | `/channels/{channelID}/members/{userID}` | Join channel | -| `DELETE` | `/channels/{channelID}/members/{userID}` | Remove member from channel | -| `POST` | `/channels/{channelID}/invite` | Join channel | -| `POST` | `/channels/{channelID}/attach` | Attach file to channel | - -## List channels - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query | N/A | NO | - -## Create new channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Name of Channel | N/A | NO | -| topic | string | POST | Subject of Channel | N/A | NO | -| type | string | POST | Channel type | N/A | NO | -| membershipPolicy | types.ChannelMembershipPolicy | POST | Membership policy (eg: featured, forced)? | N/A | NO | -| members | []string | POST | Initial members of the channel | N/A | NO | - -## Update channel details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| name | string | POST | Name of Channel | N/A | NO | -| topic | string | POST | Subject of Channel | N/A | NO | -| membershipPolicy | types.ChannelMembershipPolicy | POST | Membership policy (eg: featured, forced)? | N/A | NO | -| type | string | POST | Channel type | N/A | NO | -| organisationID | uint64 | POST | Move channel to different organisation | N/A | NO | - -## Update channel state - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/state` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| state | string | POST | Valid values: delete, undelete, archive, unarchive | N/A | YES | - -## Update channel membership flag - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/flag` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| flag | string | POST | Valid values: pinned, hidden, ignored | N/A | YES | - -## Remove channel membership flag - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/flag` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Read channel details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## List channel members - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/members` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Join channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/members/{userID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| userID | uint64 | PATH | Member ID | N/A | NO | - -## Remove member from channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/members/{userID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| userID | uint64 | PATH | Member ID | N/A | NO | - -## Join channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/invite` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| userID | []string | POST | User ID | N/A | NO | - -## Attach file to channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/attach` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| replyTo | uint64 | POST | Upload as a reply | N/A | NO | -| upload | *multipart.FileHeader | POST | File to upload | N/A | YES | - ---- - - - - -# Commands - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/commands/` | List of available commands | - -## List of available commands - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/commands/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Messages - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `POST` | `/channels/{channelID}/messages/` | Post new message to the channel | -| `POST` | `/channels/{channelID}/messages/command/{command}/exec` | Execute command | -| `GET` | `/channels/{channelID}/messages/mark-as-read` | Manages read/unread messages in a channel or a thread | -| `PUT` | `/channels/{channelID}/messages/{messageID}` | Edit existing message | -| `DELETE` | `/channels/{channelID}/messages/{messageID}` | Delete existing message | -| `POST` | `/channels/{channelID}/messages/{messageID}/replies` | Reply to a message | -| `POST` | `/channels/{channelID}/messages/{messageID}/pin` | Pin message to channel (public bookmark) | -| `DELETE` | `/channels/{channelID}/messages/{messageID}/pin` | Pin message to channel (public bookmark) | -| `POST` | `/channels/{channelID}/messages/{messageID}/bookmark` | Bookmark a message (private bookmark) | -| `DELETE` | `/channels/{channelID}/messages/{messageID}/bookmark` | Remove boomark from message (private bookmark) | -| `POST` | `/channels/{channelID}/messages/{messageID}/reaction/{reaction}` | React to a message | -| `DELETE` | `/channels/{channelID}/messages/{messageID}/reaction/{reaction}` | Delete reaction from a message | - -## Post new message to the channel - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| message | string | POST | Message contents (markdown) | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Execute command - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/command/{command}/exec` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| command | string | PATH | Command to be executed | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| input | string | POST | Arbitrary command input | N/A | NO | -| params | []string | POST | Command parameters | N/A | NO | - -## Manages read/unread messages in a channel or a thread - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/mark-as-read` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| threadID | uint64 | GET | ID of thread (messageID) | N/A | NO | -| lastReadMessageID | uint64 | GET | ID of the last read message | N/A | NO | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Edit existing message - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| message | string | POST | Message contents (markdown) | N/A | YES | - -## Delete existing message - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Reply to a message - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/replies` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | -| message | string | POST | Message contents (markdown) | N/A | YES | - -## Pin message to channel (public bookmark) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/pin` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Pin message to channel (public bookmark) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/pin` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Bookmark a message (private bookmark) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/bookmark` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Remove boomark from message (private bookmark) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/bookmark` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## React to a message - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/reaction/{reaction}` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| reaction | string | PATH | Reaction | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - -## Delete reaction from a message - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/channels/{channelID}/messages/{messageID}/reaction/{reaction}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| messageID | uint64 | PATH | Message ID | N/A | YES | -| reaction | string | PATH | Reaction | N/A | YES | -| channelID | uint64 | PATH | Channel ID | N/A | YES | - ---- - - - - -# Permissions - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/permissions/` | Retrieve defined permissions | -| `GET` | `/permissions/effective` | Effective rules for current user | -| `GET` | `/permissions/{roleID}/rules` | Retrieve role permissions | -| `DELETE` | `/permissions/{roleID}/rules` | Remove all defined role permissions | -| `PATCH` | `/permissions/{roleID}/rules` | Update permission settings | - -## Retrieve defined permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Effective rules for current user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/effective` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resource | string | GET | Show only rules for a specific resource | N/A | NO | - -## Retrieve role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Remove all defined role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Update permission settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | PATCH | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| rules | permissions.RuleSet | POST | List of permission rules to set | N/A | YES | - ---- - - - - -# Search entry point - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/search/messages` | Search for messages | -| `GET` | `/search/threads` | Search for threads | - -## Search for messages - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/search/messages` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | []string | GET | Filter by channels | N/A | NO | -| afterMessageID | uint64 | GET | ID of the first message in the list (exclusive) | N/A | NO | -| beforeMessageID | uint64 | GET | ID of the last message in the list (exclusive) | N/A | NO | -| fromMessageID | uint64 | GET | ID of the first message in the list (inclusive) | N/A | NO | -| toMessageID | uint64 | GET | ID of the last message the list (inclusive) | N/A | NO | -| threadID | []string | GET | Filter by thread message ID | N/A | NO | -| userID | []string | GET | Filter by one or more user | N/A | NO | -| type | []string | GET | Filter by message type (text, inlineImage, attachment, ...) | N/A | NO | -| pinnedOnly | bool | GET | Return only pinned messages | N/A | NO | -| bookmarkedOnly | bool | GET | Only bookmarked messages | N/A | NO | -| limit | uint | GET | Max number of messages | N/A | NO | -| query | string | GET | Search query | N/A | NO | - -## Search for threads - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/search/threads` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| channelID | []string | GET | Filter by channels | N/A | NO | -| limit | uint | GET | Max number of messages | N/A | NO | -| query | string | GET | Search query | N/A | NO | - ---- - - - - -# Settings - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/settings/` | List settings | -| `PATCH` | `/settings/` | Update settings | -| `GET` | `/settings/{key}` | Get a value for a key | -| `GET` | `/settings/current` | Current compose settings | - -## List settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| prefix | string | GET | Key prefix | N/A | NO | - -## Update settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | PATCH | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| values | settings.ValueSet | POST | Array of new settings: `[{ name: ..., value: ... }]`. Omit value to remove setting | N/A | YES | - -## Get a value for a key - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/{key}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| ownerID | uint64 | GET | Owner ID | N/A | NO | -| key | string | PATH | Setting key | N/A | YES | - -## Current compose settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/current` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Status - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/status/` | See all current statuses | -| `POST` | `/status/` | Set user's status | -| `DELETE` | `/status/` | Clear status | - -## See all current statuses - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/status/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Set user's status - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/status/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| icon | string | POST | Status icon | N/A | NO | -| message | string | POST | Status message | N/A | NO | -| expires | string | POST | Clear status when it expires (eg: when-active, afternoon, tomorrow 1h, 30m, 1 PM, 2019-05-20) | N/A | NO | - -## Clear status - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/status/` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- \ No newline at end of file diff --git a/docs/static.go b/docs/static.go new file mode 100644 index 000000000..e8336bd96 --- /dev/null +++ b/docs/static.go @@ -0,0 +1,6 @@ +// Code generated by statik. DO NOT EDIT. + +// Package contains static assets. +package docs + +var Asset = "PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00README.adocUT\x05\x00\x01\x80Cm8# Corteza API documentation\n\nWARNING: Work in progress\n\nThis is the first step in migration towards full OpenAPI standards support.`\n\n## Original/starting state (pre `2020.9`; deprecated):\nHome-brew API definition format in JSON, still available under `api/*/spec.json`.\nThis is still needed for controller/request/handler codegens. Documentation generators are disabled.\n\n## Current state (`2020.9`)\nIn branch `2020.12.x` we're experimenting with first step toward conversion to OpenAPI 3.0 YAML files for API\ndefinition. There is a converter available in https://github.com/cortezaproject/openapi3-converter[cortezaproject/openapi3-converter]\nthat takes those custom YAML files and converts them to OpenAPI format.\n\n## Goal (target `2020.12`)\nGenerate HTTP handlers and all auxilary code and documentation from YAML files in OpenAPI 3.0 format\nPK\x07\x08$jr\x0dN\x03\x00\x00N\x03\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00 \x00compose.yamlUT\x05\x00\x01\x80Cm8openapi: 3.0.0\ninfo:\n title: Corteza compose API\n description: Corteza compose REST API definition\n version: 2020.12\n contact:\n email: info@cortezaproject.org\n license:\n name: Apache 2.0\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\npaths:\n /namespace/:\n get:\n tags:\n - Namespaces\n summary: List namespaces\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: &ref_0\n type: string\n - in: query\n name: slug\n description: Search by namespace slug\n required: false\n schema: *ref_0\n - in: query\n name: limit\n description: Limit\n required: false\n schema: &ref_5\n type: string\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_0\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_0\n post:\n tags:\n - Namespaces\n summary: Create namespace\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_1\n name:\n type: string\n description: Name\n slug:\n type: string\n description: Slug (url path part)\n enabled:\n type: boolean\n description: Enabled\n meta:\n type: string\n format: json\n description: Meta data\n required:\n - name\n - meta\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_1\n '/namespace/{namespaceID}':\n get:\n tags:\n - Namespaces\n summary: Read namespace\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: ID\n required: true\n schema: &ref_2\n type: string\n post:\n tags:\n - Namespaces\n summary: Update namespace\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_3\n name:\n type: string\n description: Name\n slug:\n type: string\n description: Slug (url path part)\n enabled:\n type: boolean\n description: Enabled\n meta:\n type: string\n format: json\n description: Meta data\n updatedAt:\n type: string\n format: date-time\n description: Last update (or creation) date\n required:\n - name\n - meta\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_3\n delete:\n tags:\n - Namespaces\n summary: Delete namespace\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/trigger':\n post:\n tags:\n - Namespaces\n summary: 'Fire compose:namespace trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_4\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_4\n '/namespace/{namespaceID}/page/':\n get:\n tags:\n - Pages\n summary: List available pages\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: selfID\n description: Parent page ID\n required: false\n schema: *ref_2\n - in: query\n name: query\n description: Search query\n required: false\n schema: *ref_0\n - in: query\n name: handle\n description: Search by handle\n required: false\n schema: *ref_0\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_5\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_0\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Pages\n summary: Create page\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_6\n selfID:\n type: string\n description: Parent Page ID\n moduleID:\n type: string\n description: Module ID\n title:\n type: string\n description: Title\n handle:\n type: string\n description: Handle\n description:\n type: string\n description: Description\n weight:\n type: integer\n description: Page tree weight\n visible:\n type: boolean\n description: Visible in navigation\n blocks:\n type: string\n format: json\n description: Blocks JSON\n required:\n - title\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_6\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/page/{pageID}':\n get:\n tags:\n - Pages\n summary: Get page details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: pageID\n description: Page ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Pages\n summary: Update page\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: pageID\n description: Page ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_7\n selfID:\n type: string\n description: Parent Page ID\n moduleID:\n type: string\n description: Module ID (optional)\n title:\n type: string\n description: Title\n handle:\n type: string\n description: Handle\n description:\n type: string\n description: Description\n weight:\n type: integer\n description: Page tree weight\n visible:\n type: boolean\n description: Visible in navigation\n blocks:\n type: string\n format: json\n description: Blocks JSON\n required:\n - title\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_7\n delete:\n tags:\n - Pages\n summary: Delete page\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: pageID\n description: Page ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/page/tree':\n get:\n tags:\n - Pages\n summary: 'Get page all (non-record) pages, hierarchically'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/page/{selfID}/reorder':\n post:\n tags:\n - Pages\n summary: Reorder pages\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: selfID\n description: Parent page ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_8\n pageIDs:\n type: array\n items: *ref_0\n description: Page ID order\n required:\n - pageIDs\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_8\n '/namespace/{namespaceID}/page/{pageID}/attachment':\n post:\n tags:\n - Pages\n summary: Uploads attachment to page\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: pageID\n description: Page ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_9\n upload:\n type: string\n format: binary\n description: File to upload\n required:\n - upload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_9\n '/namespace/{namespaceID}/page/{pageID}/trigger':\n post:\n tags:\n - Pages\n summary: 'Fire compose:page trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: pageID\n description: Page ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_10\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_10\n '/namespace/{namespaceID}/module/':\n get:\n tags:\n - Modules\n summary: List modules\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: *ref_0\n - in: query\n name: name\n description: Search by name\n required: false\n schema: *ref_0\n - in: query\n name: handle\n description: Search by handle\n required: false\n schema: *ref_0\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_5\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_0\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Modules\n summary: Create module\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_11\n name:\n type: string\n description: Module Name\n handle:\n type: string\n description: Module handle\n fields:\n type: array\n items: &ref_12\n type: object\n properties:\n fieldID:\n type: string\n format: uuid\n name:\n type: string\n kind:\n type: string\n label:\n type: string\n defaultValue:\n type: array\n items:\n type: string\n maxLength:\n type: integer\n isRequired:\n type: boolean\n isPrivate:\n type: boolean\n isMulti:\n type: boolean\n isSystem:\n type: boolean\n options:\n type: object\n description: Fields JSON\n meta:\n type: string\n format: json\n description: Module meta data\n required:\n - name\n - fields\n - meta\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_11\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}':\n get:\n tags:\n - Modules\n summary: Read module\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Modules\n summary: Update module\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_13\n name:\n type: string\n description: Module Name\n handle:\n type: string\n description: Module Handle\n fields:\n type: array\n items: *ref_12\n description: Fields JSON\n meta:\n type: string\n format: json\n description: Module meta data\n updatedAt:\n type: string\n format: date-time\n description: Last update (or creation) date\n required:\n - name\n - fields\n - meta\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_13\n delete:\n tags:\n - Modules\n summary: Delete module\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/trigger':\n post:\n tags:\n - Modules\n summary: 'Fire compose:module trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_14\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_14\n '/namespace/{namespaceID}/module/{moduleID}/record/report':\n get:\n tags:\n - Records\n summary: Generates report from module records\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: metrics\n description: 'Metrics (eg: ''SUM(money), MAX(calls)'')'\n required: false\n schema: *ref_0\n - in: query\n name: dimensions\n description: 'Dimensions (eg: ''DATE(foo), status'')'\n required: true\n schema: *ref_0\n - in: query\n name: filter\n description: 'Filter (eg: ''DATE(foo) > 2010'')'\n required: false\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/':\n get:\n tags:\n - Records\n summary: List/read records from module section\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Record filtering query\n required: false\n schema: *ref_0\n - in: query\n name: filter\n description: 'Filtering condition (same as query, deprecated)'\n required: false\n schema: *ref_0\n - in: query\n name: deleted\n description: 'Exclude (0, default), include (1) or return only (2) deleted records'\n required: false\n schema: *ref_5\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_5\n - in: query\n name: offset\n description: Offset\n required: false\n schema: *ref_5\n - in: query\n name: page\n description: Page number (1-based)\n required: false\n schema: *ref_5\n - in: query\n name: perPage\n description: Returned items per page (default 50)\n required: false\n schema: *ref_5\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Records\n summary: Create record in module section\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_15\n values:\n type: array\n items: &ref_20\n type: object\n properties:\n name:\n type: string\n value:\n type: string\n description: Record values\n records:\n type: array\n items: &ref_21\n type: object\n properties:\n recordID:\n type: string\n format: uuid\n moduleID:\n type: string\n format: uuid\n namespaceID:\n type: string\n format: uuid\n values:\n type: array\n items:\n type: object\n properties:\n name:\n type: string\n value:\n type: string\n createdAt:\n type: string\n format: date-time\n updatedAt:\n type: string\n format: date-time\n deletedAt:\n type: string\n format: date-time\n ownedBy:\n type: string\n format: uuid\n createdBy:\n type: string\n format: uuid\n updatedBy:\n type: string\n format: uuid\n deletedBy:\n type: string\n format: uuid\n description: Records\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_15\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n delete:\n tags:\n - Records\n summary: Delete record row from module section\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_16\n recordIDs:\n type: array\n items: *ref_0\n description: IDs of records to delete\n truncate:\n type: boolean\n description: >-\n Remove ALL records of a specified module (pending\n implementation)\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_16\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/import':\n post:\n tags:\n - Records\n summary: Initiate record import session\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_17\n upload:\n type: string\n format: binary\n description: File import\n required:\n - upload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_17\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}':\n patch:\n tags:\n - Records\n summary: Run record import\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: sessionID\n description: Import session\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_18\n fields:\n type: string\n format: json\n description: Fields defined by import file\n onError:\n type: string\n description: What happens if record fails to import\n required:\n - fields\n - onError\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_18\n get:\n tags:\n - Records\n summary: Get import progress\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: sessionID\n description: Import session\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}':\n get:\n tags:\n - Records\n summary: 'Exports records that match '\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: filename\n description: Filename to use\n required: true\n schema: *ref_0\n - in: path\n name: ext\n description: Export format\n required: true\n schema: *ref_0\n - in: query\n name: filter\n description: Filtering condition\n required: false\n schema: *ref_0\n - in: query\n name: fields\n description: Fields to export\n required: true\n schema:\n type: array\n items: *ref_0\n - in: query\n name: timezone\n description: Convert times to this timezone\n required: false\n schema: *ref_0\n '/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}':\n post:\n tags:\n - Records\n summary: Executes server-side procedure over one or more module records\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: procedure\n description: Name of procedure to execute\n required: true\n schema: *ref_0\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_19\n args:\n type: array\n items:\n type: object\n properties:\n name:\n type: string\n value:\n type: string\n description: Procedure arguments\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_19\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}':\n get:\n tags:\n - Records\n summary: Read records by ID from module section\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: recordID\n description: Record ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Records\n summary: Update records in module section\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: recordID\n description: Record ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_22\n values:\n type: array\n items: *ref_20\n description: Record values\n records:\n type: array\n items: *ref_21\n description: Records\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_22\n delete:\n tags:\n - Records\n summary: Delete record row from module section\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: recordID\n description: Record ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/attachment':\n post:\n tags:\n - Records\n summary: Uploads attachment and validates it against record field requirements\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_23\n recordID:\n type: string\n description: Record ID\n fieldName:\n type: string\n description: Field name\n upload:\n type: string\n format: binary\n description: File to upload\n required:\n - fieldName\n - upload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_23\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger':\n post:\n tags:\n - Records\n summary: 'Fire compose:record trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n - in: path\n name: recordID\n description: ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_24\n script:\n type: string\n description: Script to execute\n values:\n type: array\n items: *ref_20\n description: Record values\n required:\n - script\n - values\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_24\n '/namespace/{namespaceID}/module/{moduleID}/record/trigger':\n post:\n tags:\n - Records\n summary: 'Fire compose:record trigger'\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_25\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_25\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: moduleID\n description: Module ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/chart/':\n get:\n tags:\n - Charts\n summary: List/read charts\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query to match against charts\n required: false\n schema: *ref_0\n - in: query\n name: handle\n description: Search charts by handle\n required: false\n schema: *ref_0\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_5\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_0\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Charts\n summary: 'List/read charts '\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_26\n config:\n type: string\n format: json\n description: Chart JSON\n name:\n type: string\n description: Chart name\n handle:\n type: string\n description: Chart handle\n required:\n - config\n - name\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_26\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/chart/{chartID}':\n get:\n tags:\n - Charts\n summary: Read charts by ID\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: chartID\n description: Chart ID\n required: true\n schema: *ref_2\n post:\n tags:\n - Charts\n summary: Add/update charts\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: chartID\n description: Chart ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_27\n config:\n type: string\n format: json\n description: Chart JSON\n name:\n type: string\n description: Chart name\n handle:\n type: string\n description: Chart handle\n updatedAt:\n type: string\n format: date-time\n description: Last update (or creation) date\n required:\n - config\n - name\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_27\n delete:\n tags:\n - Charts\n summary: Delete chart\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: chartID\n description: Chart ID\n required: true\n schema: *ref_2\n /notification/email:\n post:\n tags:\n - Notifications\n summary: Send email from the Compose\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_28\n to:\n type: array\n items: *ref_0\n description: Email addresses\n cc:\n type: array\n items: *ref_0\n description: Email addresses\n replyTo:\n type: string\n description: Email address in reply-to field\n subject:\n type: string\n description: Email subject\n content:\n type: string\n format: json\n description: Message content\n remoteAttachments:\n type: array\n items: *ref_0\n description: Remote files to attach to the email\n required:\n - to\n - content\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_28\n '/namespace/{namespaceID}/attachment/{kind}/':\n get:\n tags:\n - Attachments\n summary: 'List, filter all page attachments'\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_0\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_2\n - in: query\n name: pageID\n description: Filter attachments by page ID\n required: false\n schema: *ref_2\n - in: query\n name: moduleID\n description: Filter attachments by module ID\n required: false\n schema: *ref_2\n - in: query\n name: recordID\n description: Filter attachments by record ID\n required: false\n schema: *ref_2\n - in: query\n name: fieldName\n description: Filter attachments by field name\n required: false\n schema: *ref_0\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_5\n - in: query\n name: offset\n description: Offset\n required: false\n schema: *ref_5\n - in: query\n name: page\n description: Page number (1-based)\n required: false\n schema: *ref_5\n - in: query\n name: perPage\n description: Returned items per page (default 50)\n required: false\n schema: *ref_5\n - in: path\n name: kind\n description: Attachment kind\n required: true\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}':\n get:\n tags:\n - Attachments\n summary: Attachment details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Attachment kind\n required: true\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_2\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_0\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_2\n delete:\n tags:\n - Attachments\n summary: Delete attachment\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Attachment kind\n required: true\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_2\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_0\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_2\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}':\n get:\n tags:\n - Attachments\n summary: Serves attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Attachment kind\n required: true\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_2\n - in: path\n name: name\n description: File name\n required: true\n schema: *ref_0\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_0\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_2\n - in: query\n name: download\n description: Force file download\n required: false\n schema: &ref_30\n type: boolean\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}':\n get:\n tags:\n - Attachments\n summary: Serves preview of an attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Attachment kind\n required: true\n schema: *ref_0\n - in: path\n name: namespaceID\n description: Namespace ID\n required: true\n schema: *ref_2\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_2\n - in: path\n name: ext\n description: Preview extension/format\n required: true\n schema: *ref_0\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_0\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_2\n /permissions/:\n get:\n tags:\n - Permissions\n summary: Retrieve defined permissions\n responses:\n '200':\n description: OK\n /permissions/effective:\n get:\n tags:\n - Permissions\n summary: Effective rules for current user\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: resource\n description: Show only rules for a specific resource\n required: false\n schema: *ref_0\n '/permissions/{roleID}/rules':\n get:\n tags:\n - Permissions\n summary: Retrieve role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_2\n delete:\n tags:\n - Permissions\n summary: Remove all defined role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_2\n patch:\n tags:\n - Permissions\n summary: Update permission settings\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_29\n rules:\n type: array\n items:\n type: object\n properties:\n roleID:\n type: string\n format: uuid\n resource:\n type: string\n operation:\n type: string\n access:\n type: string\n description: List of permission rules to set\n required:\n - rules\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_29\n /automation/:\n get:\n tags:\n - Compose automation scripts\n summary: List all available automation scripts for compose resources\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: resourceTypePrefixes\n description: Filter by resource prefix\n required: false\n schema:\n type: array\n items: *ref_0\n - in: query\n name: resourceTypes\n description: Filter by resource type\n required: false\n schema:\n type: array\n items: *ref_0\n - in: query\n name: eventTypes\n description: Filter by event type\n required: false\n schema:\n type: array\n items: *ref_0\n - in: query\n name: excludeInvalid\n description: Exclude scripts that can not be used (errors)\n required: false\n schema: *ref_30\n - in: query\n name: excludeClientScripts\n description: Do not include client scripts\n required: false\n schema: *ref_30\n - in: query\n name: excludeServerScripts\n description: Do not include server scripts\n required: false\n schema: *ref_30\n '/automation/{bundle}-{type}.{ext}':\n get:\n tags:\n - Compose automation scripts\n summary: Serves client scripts bundle\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: bundle\n description: Name of the bundle\n required: true\n schema: *ref_0\n - in: path\n name: type\n description: Bundle type\n required: true\n schema: *ref_0\n - in: path\n name: ext\n description: Bundle extension\n required: true\n schema: *ref_0\n /automation/trigger:\n post:\n tags:\n - Compose automation scripts\n summary: Triggers execution of a specific script on a system service level\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_31\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_31\nPK\x07\x08M<\xdf\xf8\xdc\xc9\x00\x00\xdc\xc9\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00 \x00index.htmlUT\x05\x00\x01\x80Cm8\n\n\n \n \n Corteza Server REST API Documentation\n \n \n \n \n \n\n \n
\n \n \n\n \n \n\nPK\x07\x08;\xaaT,B\x07\x00\x00B\x07\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00 \x00messaging.yamlUT\x05\x00\x01\x80Cm8openapi: 3.0.0\ninfo:\n title: Corteza messaging API\n description: Corteza messaging REST API definition\n version: 2020.12\n contact:\n email: info@cortezaproject.org\n license:\n name: Apache 2.0\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\npaths:\n /commands/:\n get:\n tags:\n - Commands\n summary: List of available commands\n responses:\n '200':\n description: OK\n /status/:\n get:\n tags:\n - Status\n summary: See all current statuses\n responses:\n '200':\n description: OK\n post:\n tags:\n - Status\n summary: Set user's status\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_0\n icon:\n type: string\n description: Status icon\n message:\n type: string\n description: Status message\n expires:\n type: string\n description: >-\n Clear status when it expires (eg: when-active, afternoon,\n tomorrow 1h, 30m, 1 PM, 2019-05-20)\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_0\n delete:\n tags:\n - Status\n summary: Clear status\n responses:\n '200':\n description: OK\n /activity/:\n post:\n tags:\n - User activity\n summary: >-\n Sends user's activity to all subscribers; globally or per\n channel/message.\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_1\n channelID:\n type: string\n description: >-\n Channel ID, if set, activity will be send only to subscribed\n users\n messageID:\n type: string\n description: 'Message ID, if set, channelID must be set as well'\n kind:\n type: string\n description: Arbitrary string\n required:\n - kind\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_1\n /channels/:\n get:\n tags:\n - Channels\n summary: List channels\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: &ref_2\n type: string\n post:\n tags:\n - Channels\n summary: Create new channel\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_3\n name:\n type: string\n description: Name of Channel\n topic:\n type: string\n description: Subject of Channel\n type:\n type: string\n description: Channel type\n membershipPolicy:\n type: string\n description: 'Membership policy (eg: featured, forced)?'\n members:\n type: array\n items: *ref_2\n description: Initial members of the channel\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_3\n '/channels/{channelID}':\n put:\n tags:\n - Channels\n summary: Update channel details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: &ref_5\n type: string\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_4\n name:\n type: string\n description: Name of Channel\n topic:\n type: string\n description: Subject of Channel\n membershipPolicy:\n type: string\n description: 'Membership policy (eg: featured, forced)?'\n type:\n type: string\n description: Channel type\n organisationID:\n type: string\n description: Move channel to different organisation\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_4\n get:\n tags:\n - Channels\n summary: Read channel details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/state':\n put:\n tags:\n - Channels\n summary: Update channel state\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_6\n state:\n type: string\n description: 'Valid values: delete, undelete, archive, unarchive'\n required:\n - state\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_6\n '/channels/{channelID}/flag':\n put:\n tags:\n - Channels\n summary: Update channel membership flag\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_7\n flag:\n type: string\n description: 'Valid values: pinned, hidden, ignored'\n required:\n - flag\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_7\n delete:\n tags:\n - Channels\n summary: Remove channel membership flag\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/members':\n get:\n tags:\n - Channels\n summary: List channel members\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/members/{userID}':\n put:\n tags:\n - Channels\n summary: Join channel\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: userID\n description: Member ID\n required: true\n schema: *ref_5\n delete:\n tags:\n - Channels\n summary: Remove member from channel\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: userID\n description: Member ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/invite':\n post:\n tags:\n - Channels\n summary: Join channel\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_8\n userID:\n type: array\n items: *ref_2\n description: User ID\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_8\n '/channels/{channelID}/attach':\n post:\n tags:\n - Channels\n summary: Attach file to channel\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_9\n replyTo:\n type: string\n description: Upload as a reply\n upload:\n type: string\n format: binary\n description: File to upload\n required:\n - upload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_9\n '/channels/{channelID}/messages/':\n post:\n tags:\n - Messages\n summary: Post new message to the channel\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_10\n message:\n type: string\n description: Message contents (markdown)\n required:\n - message\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_10\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/messages/command/{command}/exec':\n post:\n tags:\n - Messages\n summary: Execute command\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: command\n description: Command to be executed\n required: true\n schema: *ref_2\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_11\n input:\n type: string\n description: Arbitrary command input\n params:\n type: array\n items: *ref_2\n description: Command parameters\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_11\n '/channels/{channelID}/messages/mark-as-read':\n get:\n tags:\n - Messages\n summary: Manages read/unread messages in a channel or a thread\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: query\n name: threadID\n description: 'ID of thread (messageID) '\n required: false\n schema: *ref_5\n - in: query\n name: lastReadMessageID\n description: ID of the last read message\n required: false\n schema: *ref_5\n '/channels/{channelID}/messages/{messageID}':\n put:\n tags:\n - Messages\n summary: Edit existing message\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_12\n message:\n type: string\n description: Message contents (markdown)\n required:\n - message\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_12\n delete:\n tags:\n - Messages\n summary: Delete existing message\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/messages/{messageID}/replies':\n post:\n tags:\n - Messages\n summary: Reply to a message\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_13\n message:\n type: string\n description: Message contents (markdown)\n required:\n - message\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_13\n '/channels/{channelID}/messages/{messageID}/pin':\n post:\n tags:\n - Messages\n summary: Pin message to channel (public bookmark)\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n delete:\n tags:\n - Messages\n summary: Pin message to channel (public bookmark)\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/messages/{messageID}/bookmark':\n post:\n tags:\n - Messages\n summary: Bookmark a message (private bookmark)\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n delete:\n tags:\n - Messages\n summary: Remove boomark from message (private bookmark)\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n '/channels/{channelID}/messages/{messageID}/reaction/{reaction}':\n post:\n tags:\n - Messages\n summary: React to a message\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n - in: path\n name: reaction\n description: Reaction\n required: true\n schema: *ref_2\n delete:\n tags:\n - Messages\n summary: Delete reaction from a message\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: channelID\n description: Channel ID\n required: true\n schema: *ref_5\n - in: path\n name: messageID\n description: Message ID\n required: true\n schema: *ref_5\n - in: path\n name: reaction\n description: Reaction\n required: true\n schema: *ref_2\n '/attachment/{attachmentID}/original/{name}':\n get:\n tags:\n - Attachments\n summary: Serves attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_5\n - in: path\n name: name\n description: File name\n required: true\n schema: *ref_2\n - in: query\n name: sign\n description: Signature\n required: true\n schema: *ref_2\n - in: query\n name: userID\n description: User ID\n required: true\n schema: *ref_5\n - in: query\n name: download\n description: Force file download\n required: false\n schema: &ref_14\n type: boolean\n '/attachment/{attachmentID}/preview.{ext}':\n get:\n tags:\n - Attachments\n summary: Serves preview of an attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_5\n - in: path\n name: ext\n description: Preview extension/format\n required: true\n schema: *ref_2\n - in: query\n name: sign\n description: Signature\n required: true\n schema: *ref_2\n - in: query\n name: userID\n description: User ID\n required: true\n schema: *ref_5\n /search/messages:\n get:\n tags:\n - Search entry point\n summary: Search for messages\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: *ref_2\n - in: query\n name: channelID\n description: Filter by channels\n required: false\n schema:\n type: array\n items: *ref_2\n - in: query\n name: afterMessageID\n description: ID of the first message in the list (exclusive)\n required: false\n schema: *ref_5\n - in: query\n name: beforeMessageID\n description: ID of the last message in the list (exclusive)\n required: false\n schema: *ref_5\n - in: query\n name: fromMessageID\n description: ID of the first message in the list (inclusive)\n required: false\n schema: *ref_5\n - in: query\n name: toMessageID\n description: ID of the last message the list (inclusive)\n required: false\n schema: *ref_5\n - in: query\n name: threadID\n description: Filter by thread message ID\n required: false\n schema:\n type: array\n items: *ref_2\n - in: query\n name: userID\n description: Filter by one or more user\n required: false\n schema:\n type: array\n items: *ref_2\n - in: query\n name: type\n description: 'Filter by message type (text, inlineImage, attachment, ...)'\n required: false\n schema:\n type: array\n items: *ref_2\n - in: query\n name: pinnedOnly\n description: Return only pinned messages\n required: false\n schema: *ref_14\n - in: query\n name: bookmarkedOnly\n description: Only bookmarked messages\n required: false\n schema: *ref_14\n - in: query\n name: limit\n description: Max number of messages\n required: false\n schema: &ref_15\n type: string\n /search/threads:\n get:\n tags:\n - Search entry point\n summary: Search for threads\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: *ref_2\n - in: query\n name: channelID\n description: Filter by channels\n required: false\n schema:\n type: array\n items: *ref_2\n - in: query\n name: limit\n description: Max number of messages\n required: false\n schema: *ref_15\n /permissions/:\n get:\n tags:\n - Permissions\n summary: Retrieve defined permissions\n responses:\n '200':\n description: OK\n /permissions/effective:\n get:\n tags:\n - Permissions\n summary: Effective rules for current user\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: resource\n description: Show only rules for a specific resource\n required: false\n schema: *ref_2\n '/permissions/{roleID}/rules':\n get:\n tags:\n - Permissions\n summary: Retrieve role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_5\n delete:\n tags:\n - Permissions\n summary: Remove all defined role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_5\n patch:\n tags:\n - Permissions\n summary: Update permission settings\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_5\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_16\n rules:\n type: array\n items:\n type: object\n properties:\n roleID:\n type: string\n format: uuid\n resource:\n type: string\n operation:\n type: string\n access:\n type: string\n description: List of permission rules to set\n required:\n - rules\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_16\nPK\x07\x08\x05\xac\xad\xf6\x83^\x00\x00\x83^\x00\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00 \x00static.goUT\x05\x00\x01\x80Cm8// Code generated by statik. DO NOT EDIT.\n\n// Package contains static assets.\npackage docs\n\nvar Asset = \"PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0b\\x00 \\x00README.adocUT\\x05\\x00\\x01\\x80Cm8# Corteza API documentation\\n\\nWARNING: Work in progress\\n\\nThis is the first step in migration towards full OpenAPI standards support.`\\n\\n## Original/starting state (pre `2020.9`; deprecated):\\nHome-brew API definition format in JSON, still available under `api/*/spec.json`.\\nThis is still needed for controller/request/handler codegens. Documentation generators are disabled.\\n\\n## Current state (`2020.9`)\\nIn branch `2020.12.x` we're experimenting with first step toward conversion to OpenAPI 3.0 YAML files for API\\ndefinition. There is a converter available in https://github.com/cortezaproject/openapi3-converter[cortezaproject/openapi3-converter]\\nthat takes those custom YAML files and converts them to OpenAPI format.\\n\\n## Goal (target `2020.12`)\\nGenerate HTTP handlers and all auxilary code and documentation from YAML files in OpenAPI 3.0 format\\nPK\\x07\\x08$jr\\x0dN\\x03\\x00\\x00N\\x03\\x00\\x00PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0c\\x00 \\x00compose.yamlUT\\x05\\x00\\x01\\x80Cm8openapi: 3.0.0\\ninfo:\\n title: Corteza compose API\\n description: Corteza compose REST API definition\\n version: 2020.9\\n contact:\\n email: info@cortezaproject.org\\n license:\\n name: Apache 2.0\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\npaths:\\n /namespace/:\\n get:\\n tags:\\n - Namespaces\\n summary: List namespaces\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: &ref_0\\n type: string\\n - in: query\\n name: slug\\n description: Search by namespace slug\\n required: false\\n schema: *ref_0\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: &ref_5\\n type: string\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_0\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_0\\n post:\\n tags:\\n - Namespaces\\n summary: Create namespace\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_1\\n name:\\n type: string\\n description: Name\\n slug:\\n type: string\\n description: Slug (url path part)\\n enabled:\\n type: boolean\\n description: Enabled\\n meta:\\n type: string\\n format: json\\n description: Meta data\\n required:\\n - name\\n - meta\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_1\\n '/namespace/{namespaceID}':\\n get:\\n tags:\\n - Namespaces\\n summary: Read namespace\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: ID\\n required: true\\n schema: &ref_2\\n type: string\\n post:\\n tags:\\n - Namespaces\\n summary: Update namespace\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_3\\n name:\\n type: string\\n description: Name\\n slug:\\n type: string\\n description: Slug (url path part)\\n enabled:\\n type: boolean\\n description: Enabled\\n meta:\\n type: string\\n format: json\\n description: Meta data\\n updatedAt:\\n type: string\\n format: date-time\\n description: Last update (or creation) date\\n required:\\n - name\\n - meta\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_3\\n delete:\\n tags:\\n - Namespaces\\n summary: Delete namespace\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/trigger':\\n post:\\n tags:\\n - Namespaces\\n summary: 'Fire compose:namespace trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_4\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_4\\n '/namespace/{namespaceID}/page/':\\n get:\\n tags:\\n - Pages\\n summary: List available pages\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: selfID\\n description: Parent page ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: *ref_0\\n - in: query\\n name: handle\\n description: Search by handle\\n required: false\\n schema: *ref_0\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_5\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_0\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Pages\\n summary: Create page\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_6\\n selfID:\\n type: string\\n description: Parent Page ID\\n moduleID:\\n type: string\\n description: Module ID\\n title:\\n type: string\\n description: Title\\n handle:\\n type: string\\n description: Handle\\n description:\\n type: string\\n description: Description\\n weight:\\n type: integer\\n description: Page tree weight\\n visible:\\n type: boolean\\n description: Visible in navigation\\n blocks:\\n type: string\\n format: json\\n description: Blocks JSON\\n required:\\n - title\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_6\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/page/{pageID}':\\n get:\\n tags:\\n - Pages\\n summary: Get page details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: pageID\\n description: Page ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Pages\\n summary: Update page\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: pageID\\n description: Page ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_7\\n selfID:\\n type: string\\n description: Parent Page ID\\n moduleID:\\n type: string\\n description: Module ID (optional)\\n title:\\n type: string\\n description: Title\\n handle:\\n type: string\\n description: Handle\\n description:\\n type: string\\n description: Description\\n weight:\\n type: integer\\n description: Page tree weight\\n visible:\\n type: boolean\\n description: Visible in navigation\\n blocks:\\n type: string\\n format: json\\n description: Blocks JSON\\n required:\\n - title\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_7\\n delete:\\n tags:\\n - Pages\\n summary: Delete page\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: pageID\\n description: Page ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/page/tree':\\n get:\\n tags:\\n - Pages\\n summary: 'Get page all (non-record) pages, hierarchically'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/page/{selfID}/reorder':\\n post:\\n tags:\\n - Pages\\n summary: Reorder pages\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: selfID\\n description: Parent page ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_8\\n pageIDs:\\n type: array\\n items: *ref_0\\n description: Page ID order\\n required:\\n - pageIDs\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_8\\n '/namespace/{namespaceID}/page/{pageID}/attachment':\\n post:\\n tags:\\n - Pages\\n summary: Uploads attachment to page\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: pageID\\n description: Page ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_9\\n upload:\\n type: string\\n format: binary\\n description: File to upload\\n required:\\n - upload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_9\\n '/namespace/{namespaceID}/page/{pageID}/trigger':\\n post:\\n tags:\\n - Pages\\n summary: 'Fire compose:page trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: pageID\\n description: Page ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_10\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_10\\n '/namespace/{namespaceID}/module/':\\n get:\\n tags:\\n - Modules\\n summary: List modules\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: *ref_0\\n - in: query\\n name: name\\n description: Search by name\\n required: false\\n schema: *ref_0\\n - in: query\\n name: handle\\n description: Search by handle\\n required: false\\n schema: *ref_0\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_5\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_0\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Modules\\n summary: Create module\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_11\\n name:\\n type: string\\n description: Module Name\\n handle:\\n type: string\\n description: Module handle\\n fields:\\n type: array\\n items: &ref_12\\n type: object\\n properties:\\n fieldID:\\n type: string\\n format: uuid\\n name:\\n type: string\\n kind:\\n type: string\\n label:\\n type: string\\n defaultValue:\\n type: array\\n items:\\n type: string\\n maxLength:\\n type: integer\\n isRequired:\\n type: boolean\\n isPrivate:\\n type: boolean\\n isMulti:\\n type: boolean\\n isSystem:\\n type: boolean\\n options:\\n type: object\\n description: Fields JSON\\n meta:\\n type: string\\n format: json\\n description: Module meta data\\n required:\\n - name\\n - fields\\n - meta\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_11\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}':\\n get:\\n tags:\\n - Modules\\n summary: Read module\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Modules\\n summary: Update module\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_13\\n name:\\n type: string\\n description: Module Name\\n handle:\\n type: string\\n description: Module Handle\\n fields:\\n type: array\\n items: *ref_12\\n description: Fields JSON\\n meta:\\n type: string\\n format: json\\n description: Module meta data\\n updatedAt:\\n type: string\\n format: date-time\\n description: Last update (or creation) date\\n required:\\n - name\\n - fields\\n - meta\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_13\\n delete:\\n tags:\\n - Modules\\n summary: Delete module\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/trigger':\\n post:\\n tags:\\n - Modules\\n summary: 'Fire compose:module trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_14\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_14\\n '/namespace/{namespaceID}/module/{moduleID}/record/report':\\n get:\\n tags:\\n - Records\\n summary: Generates report from module records\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: metrics\\n description: 'Metrics (eg: ''SUM(money), MAX(calls)'')'\\n required: false\\n schema: *ref_0\\n - in: query\\n name: dimensions\\n description: 'Dimensions (eg: ''DATE(foo), status'')'\\n required: true\\n schema: *ref_0\\n - in: query\\n name: filter\\n description: 'Filter (eg: ''DATE(foo) > 2010'')'\\n required: false\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/':\\n get:\\n tags:\\n - Records\\n summary: List/read records from module section\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Record filtering query\\n required: false\\n schema: *ref_0\\n - in: query\\n name: filter\\n description: 'Filtering condition (same as query, deprecated)'\\n required: false\\n schema: *ref_0\\n - in: query\\n name: deleted\\n description: 'Exclude (0, default), include (1) or return only (2) deleted records'\\n required: false\\n schema: *ref_5\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_5\\n - in: query\\n name: offset\\n description: Offset\\n required: false\\n schema: *ref_5\\n - in: query\\n name: page\\n description: Page number (1-based)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: perPage\\n description: Returned items per page (default 50)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Records\\n summary: Create record in module section\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_15\\n values:\\n type: array\\n items: &ref_20\\n type: object\\n properties:\\n name:\\n type: string\\n value:\\n type: string\\n description: Record values\\n records:\\n type: array\\n items: &ref_21\\n type: object\\n properties:\\n recordID:\\n type: string\\n format: uuid\\n moduleID:\\n type: string\\n format: uuid\\n namespaceID:\\n type: string\\n format: uuid\\n values:\\n type: array\\n items:\\n type: object\\n properties:\\n name:\\n type: string\\n value:\\n type: string\\n createdAt:\\n type: string\\n format: date-time\\n updatedAt:\\n type: string\\n format: date-time\\n deletedAt:\\n type: string\\n format: date-time\\n ownedBy:\\n type: string\\n format: uuid\\n createdBy:\\n type: string\\n format: uuid\\n updatedBy:\\n type: string\\n format: uuid\\n deletedBy:\\n type: string\\n format: uuid\\n description: Records\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_15\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n delete:\\n tags:\\n - Records\\n summary: Delete record row from module section\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_16\\n recordIDs:\\n type: array\\n items: *ref_0\\n description: IDs of records to delete\\n truncate:\\n type: boolean\\n description: >-\\n Remove ALL records of a specified module (pending\\n implementation)\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_16\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/import':\\n post:\\n tags:\\n - Records\\n summary: Initiate record import session\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_17\\n upload:\\n type: string\\n format: binary\\n description: File import\\n required:\\n - upload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_17\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}':\\n patch:\\n tags:\\n - Records\\n summary: Run record import\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: sessionID\\n description: Import session\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_18\\n fields:\\n type: string\\n format: json\\n description: Fields defined by import file\\n onError:\\n type: string\\n description: What happens if record fails to import\\n required:\\n - fields\\n - onError\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_18\\n get:\\n tags:\\n - Records\\n summary: Get import progress\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: sessionID\\n description: Import session\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}':\\n get:\\n tags:\\n - Records\\n summary: 'Exports records that match '\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: filename\\n description: Filename to use\\n required: true\\n schema: *ref_0\\n - in: path\\n name: ext\\n description: Export format\\n required: true\\n schema: *ref_0\\n - in: query\\n name: filter\\n description: Filtering condition\\n required: false\\n schema: *ref_0\\n - in: query\\n name: fields\\n description: Fields to export\\n required: true\\n schema:\\n type: array\\n items: *ref_0\\n - in: query\\n name: timezone\\n description: Convert times to this timezone\\n required: false\\n schema: *ref_0\\n '/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}':\\n post:\\n tags:\\n - Records\\n summary: Executes server-side procedure over one or more module records\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: procedure\\n description: Name of procedure to execute\\n required: true\\n schema: *ref_0\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_19\\n args:\\n type: array\\n items:\\n type: object\\n properties:\\n name:\\n type: string\\n value:\\n type: string\\n description: Procedure arguments\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_19\\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}':\\n get:\\n tags:\\n - Records\\n summary: Read records by ID from module section\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: recordID\\n description: Record ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Records\\n summary: Update records in module section\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: recordID\\n description: Record ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_22\\n values:\\n type: array\\n items: *ref_20\\n description: Record values\\n records:\\n type: array\\n items: *ref_21\\n description: Records\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_22\\n delete:\\n tags:\\n - Records\\n summary: Delete record row from module section\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: recordID\\n description: Record ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/attachment':\\n post:\\n tags:\\n - Records\\n summary: Uploads attachment and validates it against record field requirements\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_23\\n recordID:\\n type: string\\n description: Record ID\\n fieldName:\\n type: string\\n description: Field name\\n upload:\\n type: string\\n format: binary\\n description: File to upload\\n required:\\n - fieldName\\n - upload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_23\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger':\\n post:\\n tags:\\n - Records\\n summary: 'Fire compose:record trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: recordID\\n description: ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_24\\n script:\\n type: string\\n description: Script to execute\\n values:\\n type: array\\n items: *ref_20\\n description: Record values\\n required:\\n - script\\n - values\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_24\\n '/namespace/{namespaceID}/module/{moduleID}/record/trigger':\\n post:\\n tags:\\n - Records\\n summary: 'Fire compose:record trigger'\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_25\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_25\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: moduleID\\n description: Module ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/chart/':\\n get:\\n tags:\\n - Charts\\n summary: List/read charts\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query to match against charts\\n required: false\\n schema: *ref_0\\n - in: query\\n name: handle\\n description: Search charts by handle\\n required: false\\n schema: *ref_0\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_5\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_0\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Charts\\n summary: 'List/read charts '\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_26\\n config:\\n type: string\\n format: json\\n description: Chart JSON\\n name:\\n type: string\\n description: Chart name\\n handle:\\n type: string\\n description: Chart handle\\n required:\\n - config\\n - name\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_26\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/chart/{chartID}':\\n get:\\n tags:\\n - Charts\\n summary: Read charts by ID\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: chartID\\n description: Chart ID\\n required: true\\n schema: *ref_2\\n post:\\n tags:\\n - Charts\\n summary: Add/update charts\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: chartID\\n description: Chart ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_27\\n config:\\n type: string\\n format: json\\n description: Chart JSON\\n name:\\n type: string\\n description: Chart name\\n handle:\\n type: string\\n description: Chart handle\\n updatedAt:\\n type: string\\n format: date-time\\n description: Last update (or creation) date\\n required:\\n - config\\n - name\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_27\\n delete:\\n tags:\\n - Charts\\n summary: Delete chart\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: chartID\\n description: Chart ID\\n required: true\\n schema: *ref_2\\n /notification/email:\\n post:\\n tags:\\n - Notifications\\n summary: Send email from the Compose\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_28\\n to:\\n type: array\\n items: *ref_0\\n description: Email addresses\\n cc:\\n type: array\\n items: *ref_0\\n description: Email addresses\\n replyTo:\\n type: string\\n description: Email address in reply-to field\\n subject:\\n type: string\\n description: Email subject\\n content:\\n type: string\\n format: json\\n description: Message content\\n remoteAttachments:\\n type: array\\n items: *ref_0\\n description: Remote files to attach to the email\\n required:\\n - to\\n - content\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_28\\n '/namespace/{namespaceID}/attachment/{kind}/':\\n get:\\n tags:\\n - Attachments\\n summary: 'List, filter all page attachments'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_0\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: pageID\\n description: Filter attachments by page ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: moduleID\\n description: Filter attachments by module ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: recordID\\n description: Filter attachments by record ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: fieldName\\n description: Filter attachments by field name\\n required: false\\n schema: *ref_0\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_5\\n - in: query\\n name: offset\\n description: Offset\\n required: false\\n schema: *ref_5\\n - in: query\\n name: page\\n description: Page number (1-based)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: perPage\\n description: Returned items per page (default 50)\\n required: false\\n schema: *ref_5\\n - in: path\\n name: kind\\n description: Attachment kind\\n required: true\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}':\\n get:\\n tags:\\n - Attachments\\n summary: Attachment details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Attachment kind\\n required: true\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_2\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_0\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_2\\n delete:\\n tags:\\n - Attachments\\n summary: Delete attachment\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Attachment kind\\n required: true\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_2\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_0\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_2\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Attachment kind\\n required: true\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: name\\n description: File name\\n required: true\\n schema: *ref_0\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_0\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_2\\n - in: query\\n name: download\\n description: Force file download\\n required: false\\n schema: &ref_30\\n type: boolean\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves preview of an attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Attachment kind\\n required: true\\n schema: *ref_0\\n - in: path\\n name: namespaceID\\n description: Namespace ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_2\\n - in: path\\n name: ext\\n description: Preview extension/format\\n required: true\\n schema: *ref_0\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_0\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_2\\n /permissions/:\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve defined permissions\\n responses:\\n '200':\\n description: OK\\n /permissions/effective:\\n get:\\n tags:\\n - Permissions\\n summary: Effective rules for current user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: resource\\n description: Show only rules for a specific resource\\n required: false\\n schema: *ref_0\\n '/permissions/{roleID}/rules':\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_2\\n delete:\\n tags:\\n - Permissions\\n summary: Remove all defined role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_2\\n patch:\\n tags:\\n - Permissions\\n summary: Update permission settings\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_29\\n rules:\\n type: array\\n items:\\n type: object\\n properties:\\n roleID:\\n type: string\\n format: uuid\\n resource:\\n type: string\\n operation:\\n type: string\\n access:\\n type: string\\n description: List of permission rules to set\\n required:\\n - rules\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_29\\n /automation/:\\n get:\\n tags:\\n - Compose automation scripts\\n summary: List all available automation scripts for compose resources\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: resourceTypePrefixes\\n description: Filter by resource prefix\\n required: false\\n schema:\\n type: array\\n items: *ref_0\\n - in: query\\n name: resourceTypes\\n description: Filter by resource type\\n required: false\\n schema:\\n type: array\\n items: *ref_0\\n - in: query\\n name: eventTypes\\n description: Filter by event type\\n required: false\\n schema:\\n type: array\\n items: *ref_0\\n - in: query\\n name: excludeInvalid\\n description: Exclude scripts that can not be used (errors)\\n required: false\\n schema: *ref_30\\n - in: query\\n name: excludeClientScripts\\n description: Do not include client scripts\\n required: false\\n schema: *ref_30\\n - in: query\\n name: excludeServerScripts\\n description: Do not include server scripts\\n required: false\\n schema: *ref_30\\n '/automation/{bundle}-{type}.{ext}':\\n get:\\n tags:\\n - Compose automation scripts\\n summary: Serves client scripts bundle\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: bundle\\n description: Name of the bundle\\n required: true\\n schema: *ref_0\\n - in: path\\n name: type\\n description: Bundle type\\n required: true\\n schema: *ref_0\\n - in: path\\n name: ext\\n description: Bundle extension\\n required: true\\n schema: *ref_0\\n /automation/trigger:\\n post:\\n tags:\\n - Compose automation scripts\\n summary: Triggers execution of a specific script on a system service level\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_31\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_31\\nPK\\x07\\x08\\xf4\\xc4\\xa2\\x1d\\xdb\\xc9\\x00\\x00\\xdb\\xc9\\x00\\x00PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\n\\x00 \\x00index.htmlUT\\x05\\x00\\x01\\x80Cm8\\n\\n\\n \\n \\n Corteza Server REST API Documentation\\n \\n \\n \\n \\n \\n\\n \\n
\\n \\n \\n\\n \\n \\n\\nPK\\x07\\x08;\\xaaT,B\\x07\\x00\\x00B\\x07\\x00\\x00PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0e\\x00 \\x00messaging.yamlUT\\x05\\x00\\x01\\x80Cm8openapi: 3.0.0\\ninfo:\\n title: Corteza messaging API\\n description: Corteza messaging REST API definition\\n version: 2020.9\\n contact:\\n email: info@cortezaproject.org\\n license:\\n name: Apache 2.0\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\npaths:\\n /commands/:\\n get:\\n tags:\\n - Commands\\n summary: List of available commands\\n responses:\\n '200':\\n description: OK\\n /status/:\\n get:\\n tags:\\n - Status\\n summary: See all current statuses\\n responses:\\n '200':\\n description: OK\\n post:\\n tags:\\n - Status\\n summary: Set user's status\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_0\\n icon:\\n type: string\\n description: Status icon\\n message:\\n type: string\\n description: Status message\\n expires:\\n type: string\\n description: >-\\n Clear status when it expires (eg: when-active, afternoon,\\n tomorrow 1h, 30m, 1 PM, 2019-05-20)\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_0\\n delete:\\n tags:\\n - Status\\n summary: Clear status\\n responses:\\n '200':\\n description: OK\\n /activity/:\\n post:\\n tags:\\n - User activity\\n summary: >-\\n Sends user's activity to all subscribers; globally or per\\n channel/message.\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_1\\n channelID:\\n type: string\\n description: >-\\n Channel ID, if set, activity will be send only to subscribed\\n users\\n messageID:\\n type: string\\n description: 'Message ID, if set, channelID must be set as well'\\n kind:\\n type: string\\n description: Arbitrary string\\n required:\\n - kind\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_1\\n /channels/:\\n get:\\n tags:\\n - Channels\\n summary: List channels\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: &ref_2\\n type: string\\n post:\\n tags:\\n - Channels\\n summary: Create new channel\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_3\\n name:\\n type: string\\n description: Name of Channel\\n topic:\\n type: string\\n description: Subject of Channel\\n type:\\n type: string\\n description: Channel type\\n membershipPolicy:\\n type: string\\n description: 'Membership policy (eg: featured, forced)?'\\n members:\\n type: array\\n items: *ref_2\\n description: Initial members of the channel\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_3\\n '/channels/{channelID}':\\n put:\\n tags:\\n - Channels\\n summary: Update channel details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: &ref_5\\n type: string\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_4\\n name:\\n type: string\\n description: Name of Channel\\n topic:\\n type: string\\n description: Subject of Channel\\n membershipPolicy:\\n type: string\\n description: 'Membership policy (eg: featured, forced)?'\\n type:\\n type: string\\n description: Channel type\\n organisationID:\\n type: string\\n description: Move channel to different organisation\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_4\\n get:\\n tags:\\n - Channels\\n summary: Read channel details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/state':\\n put:\\n tags:\\n - Channels\\n summary: Update channel state\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_6\\n state:\\n type: string\\n description: 'Valid values: delete, undelete, archive, unarchive'\\n required:\\n - state\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_6\\n '/channels/{channelID}/flag':\\n put:\\n tags:\\n - Channels\\n summary: Update channel membership flag\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_7\\n flag:\\n type: string\\n description: 'Valid values: pinned, hidden, ignored'\\n required:\\n - flag\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_7\\n delete:\\n tags:\\n - Channels\\n summary: Remove channel membership flag\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/members':\\n get:\\n tags:\\n - Channels\\n summary: List channel members\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/members/{userID}':\\n put:\\n tags:\\n - Channels\\n summary: Join channel\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: userID\\n description: Member ID\\n required: true\\n schema: *ref_5\\n delete:\\n tags:\\n - Channels\\n summary: Remove member from channel\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: userID\\n description: Member ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/invite':\\n post:\\n tags:\\n - Channels\\n summary: Join channel\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_8\\n userID:\\n type: array\\n items: *ref_2\\n description: User ID\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_8\\n '/channels/{channelID}/attach':\\n post:\\n tags:\\n - Channels\\n summary: Attach file to channel\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_9\\n replyTo:\\n type: string\\n description: Upload as a reply\\n upload:\\n type: string\\n format: binary\\n description: File to upload\\n required:\\n - upload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_9\\n '/channels/{channelID}/messages/':\\n post:\\n tags:\\n - Messages\\n summary: Post new message to the channel\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_10\\n message:\\n type: string\\n description: Message contents (markdown)\\n required:\\n - message\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_10\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/messages/command/{command}/exec':\\n post:\\n tags:\\n - Messages\\n summary: Execute command\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: command\\n description: Command to be executed\\n required: true\\n schema: *ref_2\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_11\\n input:\\n type: string\\n description: Arbitrary command input\\n params:\\n type: array\\n items: *ref_2\\n description: Command parameters\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_11\\n '/channels/{channelID}/messages/mark-as-read':\\n get:\\n tags:\\n - Messages\\n summary: Manages read/unread messages in a channel or a thread\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: query\\n name: threadID\\n description: 'ID of thread (messageID) '\\n required: false\\n schema: *ref_5\\n - in: query\\n name: lastReadMessageID\\n description: ID of the last read message\\n required: false\\n schema: *ref_5\\n '/channels/{channelID}/messages/{messageID}':\\n put:\\n tags:\\n - Messages\\n summary: Edit existing message\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_12\\n message:\\n type: string\\n description: Message contents (markdown)\\n required:\\n - message\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_12\\n delete:\\n tags:\\n - Messages\\n summary: Delete existing message\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/messages/{messageID}/replies':\\n post:\\n tags:\\n - Messages\\n summary: Reply to a message\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_13\\n message:\\n type: string\\n description: Message contents (markdown)\\n required:\\n - message\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_13\\n '/channels/{channelID}/messages/{messageID}/pin':\\n post:\\n tags:\\n - Messages\\n summary: Pin message to channel (public bookmark)\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n delete:\\n tags:\\n - Messages\\n summary: Pin message to channel (public bookmark)\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/messages/{messageID}/bookmark':\\n post:\\n tags:\\n - Messages\\n summary: Bookmark a message (private bookmark)\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n delete:\\n tags:\\n - Messages\\n summary: Remove boomark from message (private bookmark)\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n '/channels/{channelID}/messages/{messageID}/reaction/{reaction}':\\n post:\\n tags:\\n - Messages\\n summary: React to a message\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: reaction\\n description: Reaction\\n required: true\\n schema: *ref_2\\n delete:\\n tags:\\n - Messages\\n summary: Delete reaction from a message\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: channelID\\n description: Channel ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: messageID\\n description: Message ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: reaction\\n description: Reaction\\n required: true\\n schema: *ref_2\\n '/attachment/{attachmentID}/original/{name}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: name\\n description: File name\\n required: true\\n schema: *ref_2\\n - in: query\\n name: sign\\n description: Signature\\n required: true\\n schema: *ref_2\\n - in: query\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_5\\n - in: query\\n name: download\\n description: Force file download\\n required: false\\n schema: &ref_14\\n type: boolean\\n '/attachment/{attachmentID}/preview.{ext}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves preview of an attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_5\\n - in: path\\n name: ext\\n description: Preview extension/format\\n required: true\\n schema: *ref_2\\n - in: query\\n name: sign\\n description: Signature\\n required: true\\n schema: *ref_2\\n - in: query\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_5\\n /search/messages:\\n get:\\n tags:\\n - Search entry point\\n summary: Search for messages\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: *ref_2\\n - in: query\\n name: channelID\\n description: Filter by channels\\n required: false\\n schema:\\n type: array\\n items: *ref_2\\n - in: query\\n name: afterMessageID\\n description: ID of the first message in the list (exclusive)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: beforeMessageID\\n description: ID of the last message in the list (exclusive)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: fromMessageID\\n description: ID of the first message in the list (inclusive)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: toMessageID\\n description: ID of the last message the list (inclusive)\\n required: false\\n schema: *ref_5\\n - in: query\\n name: threadID\\n description: Filter by thread message ID\\n required: false\\n schema:\\n type: array\\n items: *ref_2\\n - in: query\\n name: userID\\n description: Filter by one or more user\\n required: false\\n schema:\\n type: array\\n items: *ref_2\\n - in: query\\n name: type\\n description: 'Filter by message type (text, inlineImage, attachment, ...)'\\n required: false\\n schema:\\n type: array\\n items: *ref_2\\n - in: query\\n name: pinnedOnly\\n description: Return only pinned messages\\n required: false\\n schema: *ref_14\\n - in: query\\n name: bookmarkedOnly\\n description: Only bookmarked messages\\n required: false\\n schema: *ref_14\\n - in: query\\n name: limit\\n description: Max number of messages\\n required: false\\n schema: &ref_15\\n type: string\\n /search/threads:\\n get:\\n tags:\\n - Search entry point\\n summary: Search for threads\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: *ref_2\\n - in: query\\n name: channelID\\n description: Filter by channels\\n required: false\\n schema:\\n type: array\\n items: *ref_2\\n - in: query\\n name: limit\\n description: Max number of messages\\n required: false\\n schema: *ref_15\\n /permissions/:\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve defined permissions\\n responses:\\n '200':\\n description: OK\\n /permissions/effective:\\n get:\\n tags:\\n - Permissions\\n summary: Effective rules for current user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: resource\\n description: Show only rules for a specific resource\\n required: false\\n schema: *ref_2\\n '/permissions/{roleID}/rules':\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_5\\n delete:\\n tags:\\n - Permissions\\n summary: Remove all defined role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_5\\n patch:\\n tags:\\n - Permissions\\n summary: Update permission settings\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_5\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_16\\n rules:\\n type: array\\n items:\\n type: object\\n properties:\\n roleID:\\n type: string\\n format: uuid\\n resource:\\n type: string\\n operation:\\n type: string\\n access:\\n type: string\\n description: List of permission rules to set\\n required:\\n - rules\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_16\\nPK\\x07\\x08\\x83J.D\\x82^\\x00\\x00\\x82^\\x00\\x00PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00 \\x00 \\x00static.goUT\\x05\\x00\\x01\\x80Cm8// Code generated by statik. DO NOT EDIT.\\n\\n// Package contains static assets.\\npackage docs\\n\\nvar Asset = \\\"PK\\\\x03\\\\x04\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x0b\\\\x00 \\\\x00README.adocUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8# Corteza API documentation\\\\n\\\\nWARNING: Work in progress\\\\n\\\\nThis is the first step in migration towards full OpenAPI standards support.`\\\\n\\\\n## Original/starting state (pre `2020.9`; deprecated):\\\\nHome-brew API definition format in JSON, still available under `api/*/spec.json`.\\\\nThis is still needed for controller/request/handler codegens. Documentation generators are disabled.\\\\n\\\\n## Current state (`2020.9`)\\\\nIn branch `2020.12.x` we're experimenting with first step toward conversion to OpenAPI 3.0 YAML files for API\\\\ndefinition. There is a converter available in https://github.com/cortezaproject/openapi3-converter[cortezaproject/openapi3-converter]\\\\nthat takes those custom YAML files and converts them to OpenAPI format.\\\\n\\\\n## Goal (target `2020.12`)\\\\nGenerate HTTP handlers and all auxilary code and documentation from YAML files in OpenAPI 3.0 format\\\\nPK\\\\x07\\\\x08$jr\\\\x0dN\\\\x03\\\\x00\\\\x00N\\\\x03\\\\x00\\\\x00PK\\\\x03\\\\x04\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x0c\\\\x00 \\\\x00compose.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8openapi: 3.0.0\\\\ninfo:\\\\n title: Corteza compose API\\\\n description: Corteza compose REST API definition\\\\n version: 2020.9\\\\n contact:\\\\n email: info@cortezaproject.org\\\\n license:\\\\n name: Apache 2.0\\\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\\\npaths:\\\\n /namespace/:\\\\n get:\\\\n tags:\\\\n - Namespaces\\\\n summary: List namespaces\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: &ref_0\\\\n type: string\\\\n - in: query\\\\n name: slug\\\\n description: Search by namespace slug\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: &ref_5\\\\n type: string\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_0\\\\n post:\\\\n tags:\\\\n - Namespaces\\\\n summary: Create namespace\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_1\\\\n name:\\\\n type: string\\\\n description: Name\\\\n slug:\\\\n type: string\\\\n description: Slug (url path part)\\\\n enabled:\\\\n type: boolean\\\\n description: Enabled\\\\n meta:\\\\n type: string\\\\n format: json\\\\n description: Meta data\\\\n required:\\\\n - name\\\\n - meta\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_1\\\\n '/namespace/{namespaceID}':\\\\n get:\\\\n tags:\\\\n - Namespaces\\\\n summary: Read namespace\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: ID\\\\n required: true\\\\n schema: &ref_2\\\\n type: string\\\\n post:\\\\n tags:\\\\n - Namespaces\\\\n summary: Update namespace\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_3\\\\n name:\\\\n type: string\\\\n description: Name\\\\n slug:\\\\n type: string\\\\n description: Slug (url path part)\\\\n enabled:\\\\n type: boolean\\\\n description: Enabled\\\\n meta:\\\\n type: string\\\\n format: json\\\\n description: Meta data\\\\n updatedAt:\\\\n type: string\\\\n format: date-time\\\\n description: Last update (or creation) date\\\\n required:\\\\n - name\\\\n - meta\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_3\\\\n delete:\\\\n tags:\\\\n - Namespaces\\\\n summary: Delete namespace\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/trigger':\\\\n post:\\\\n tags:\\\\n - Namespaces\\\\n summary: 'Fire compose:namespace trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_4\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_4\\\\n '/namespace/{namespaceID}/page/':\\\\n get:\\\\n tags:\\\\n - Pages\\\\n summary: List available pages\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: selfID\\\\n description: Parent page ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: handle\\\\n description: Search by handle\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Pages\\\\n summary: Create page\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_6\\\\n selfID:\\\\n type: string\\\\n description: Parent Page ID\\\\n moduleID:\\\\n type: string\\\\n description: Module ID\\\\n title:\\\\n type: string\\\\n description: Title\\\\n handle:\\\\n type: string\\\\n description: Handle\\\\n description:\\\\n type: string\\\\n description: Description\\\\n weight:\\\\n type: integer\\\\n description: Page tree weight\\\\n visible:\\\\n type: boolean\\\\n description: Visible in navigation\\\\n blocks:\\\\n type: string\\\\n format: json\\\\n description: Blocks JSON\\\\n required:\\\\n - title\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_6\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/page/{pageID}':\\\\n get:\\\\n tags:\\\\n - Pages\\\\n summary: Get page details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: pageID\\\\n description: Page ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Pages\\\\n summary: Update page\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: pageID\\\\n description: Page ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_7\\\\n selfID:\\\\n type: string\\\\n description: Parent Page ID\\\\n moduleID:\\\\n type: string\\\\n description: Module ID (optional)\\\\n title:\\\\n type: string\\\\n description: Title\\\\n handle:\\\\n type: string\\\\n description: Handle\\\\n description:\\\\n type: string\\\\n description: Description\\\\n weight:\\\\n type: integer\\\\n description: Page tree weight\\\\n visible:\\\\n type: boolean\\\\n description: Visible in navigation\\\\n blocks:\\\\n type: string\\\\n format: json\\\\n description: Blocks JSON\\\\n required:\\\\n - title\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_7\\\\n delete:\\\\n tags:\\\\n - Pages\\\\n summary: Delete page\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: pageID\\\\n description: Page ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/page/tree':\\\\n get:\\\\n tags:\\\\n - Pages\\\\n summary: 'Get page all (non-record) pages, hierarchically'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/page/{selfID}/reorder':\\\\n post:\\\\n tags:\\\\n - Pages\\\\n summary: Reorder pages\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: selfID\\\\n description: Parent page ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_8\\\\n pageIDs:\\\\n type: array\\\\n items: *ref_0\\\\n description: Page ID order\\\\n required:\\\\n - pageIDs\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_8\\\\n '/namespace/{namespaceID}/page/{pageID}/attachment':\\\\n post:\\\\n tags:\\\\n - Pages\\\\n summary: Uploads attachment to page\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: pageID\\\\n description: Page ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_9\\\\n upload:\\\\n type: string\\\\n format: binary\\\\n description: File to upload\\\\n required:\\\\n - upload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_9\\\\n '/namespace/{namespaceID}/page/{pageID}/trigger':\\\\n post:\\\\n tags:\\\\n - Pages\\\\n summary: 'Fire compose:page trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: pageID\\\\n description: Page ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_10\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_10\\\\n '/namespace/{namespaceID}/module/':\\\\n get:\\\\n tags:\\\\n - Modules\\\\n summary: List modules\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: name\\\\n description: Search by name\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: handle\\\\n description: Search by handle\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Modules\\\\n summary: Create module\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_11\\\\n name:\\\\n type: string\\\\n description: Module Name\\\\n handle:\\\\n type: string\\\\n description: Module handle\\\\n fields:\\\\n type: array\\\\n items: &ref_12\\\\n type: object\\\\n properties:\\\\n fieldID:\\\\n type: string\\\\n format: uuid\\\\n name:\\\\n type: string\\\\n kind:\\\\n type: string\\\\n label:\\\\n type: string\\\\n defaultValue:\\\\n type: array\\\\n items:\\\\n type: string\\\\n maxLength:\\\\n type: integer\\\\n isRequired:\\\\n type: boolean\\\\n isPrivate:\\\\n type: boolean\\\\n isMulti:\\\\n type: boolean\\\\n isSystem:\\\\n type: boolean\\\\n options:\\\\n type: object\\\\n description: Fields JSON\\\\n meta:\\\\n type: string\\\\n format: json\\\\n description: Module meta data\\\\n required:\\\\n - name\\\\n - fields\\\\n - meta\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_11\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}':\\\\n get:\\\\n tags:\\\\n - Modules\\\\n summary: Read module\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Modules\\\\n summary: Update module\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_13\\\\n name:\\\\n type: string\\\\n description: Module Name\\\\n handle:\\\\n type: string\\\\n description: Module Handle\\\\n fields:\\\\n type: array\\\\n items: *ref_12\\\\n description: Fields JSON\\\\n meta:\\\\n type: string\\\\n format: json\\\\n description: Module meta data\\\\n updatedAt:\\\\n type: string\\\\n format: date-time\\\\n description: Last update (or creation) date\\\\n required:\\\\n - name\\\\n - fields\\\\n - meta\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_13\\\\n delete:\\\\n tags:\\\\n - Modules\\\\n summary: Delete module\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/trigger':\\\\n post:\\\\n tags:\\\\n - Modules\\\\n summary: 'Fire compose:module trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_14\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_14\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/report':\\\\n get:\\\\n tags:\\\\n - Records\\\\n summary: Generates report from module records\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: metrics\\\\n description: 'Metrics (eg: ''SUM(money), MAX(calls)'')'\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: dimensions\\\\n description: 'Dimensions (eg: ''DATE(foo), status'')'\\\\n required: true\\\\n schema: *ref_0\\\\n - in: query\\\\n name: filter\\\\n description: 'Filter (eg: ''DATE(foo) > 2010'')'\\\\n required: false\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/':\\\\n get:\\\\n tags:\\\\n - Records\\\\n summary: List/read records from module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Record filtering query\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: filter\\\\n description: 'Filtering condition (same as query, deprecated)'\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: deleted\\\\n description: 'Exclude (0, default), include (1) or return only (2) deleted records'\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: offset\\\\n description: Offset\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: page\\\\n description: Page number (1-based)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: perPage\\\\n description: Returned items per page (default 50)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: Create record in module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_15\\\\n values:\\\\n type: array\\\\n items: &ref_20\\\\n type: object\\\\n properties:\\\\n name:\\\\n type: string\\\\n value:\\\\n type: string\\\\n description: Record values\\\\n records:\\\\n type: array\\\\n items: &ref_21\\\\n type: object\\\\n properties:\\\\n recordID:\\\\n type: string\\\\n format: uuid\\\\n moduleID:\\\\n type: string\\\\n format: uuid\\\\n namespaceID:\\\\n type: string\\\\n format: uuid\\\\n values:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n name:\\\\n type: string\\\\n value:\\\\n type: string\\\\n createdAt:\\\\n type: string\\\\n format: date-time\\\\n updatedAt:\\\\n type: string\\\\n format: date-time\\\\n deletedAt:\\\\n type: string\\\\n format: date-time\\\\n ownedBy:\\\\n type: string\\\\n format: uuid\\\\n createdBy:\\\\n type: string\\\\n format: uuid\\\\n updatedBy:\\\\n type: string\\\\n format: uuid\\\\n deletedBy:\\\\n type: string\\\\n format: uuid\\\\n description: Records\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_15\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n delete:\\\\n tags:\\\\n - Records\\\\n summary: Delete record row from module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_16\\\\n recordIDs:\\\\n type: array\\\\n items: *ref_0\\\\n description: IDs of records to delete\\\\n truncate:\\\\n type: boolean\\\\n description: >-\\\\n Remove ALL records of a specified module (pending\\\\n implementation)\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_16\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/import':\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: Initiate record import session\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_17\\\\n upload:\\\\n type: string\\\\n format: binary\\\\n description: File import\\\\n required:\\\\n - upload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_17\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/import/{sessionID}':\\\\n patch:\\\\n tags:\\\\n - Records\\\\n summary: Run record import\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: sessionID\\\\n description: Import session\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_18\\\\n fields:\\\\n type: string\\\\n format: json\\\\n description: Fields defined by import file\\\\n onError:\\\\n type: string\\\\n description: What happens if record fails to import\\\\n required:\\\\n - fields\\\\n - onError\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_18\\\\n get:\\\\n tags:\\\\n - Records\\\\n summary: Get import progress\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: sessionID\\\\n description: Import session\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/export{filename}.{ext}':\\\\n get:\\\\n tags:\\\\n - Records\\\\n summary: 'Exports records that match '\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: filename\\\\n description: Filename to use\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: ext\\\\n description: Export format\\\\n required: true\\\\n schema: *ref_0\\\\n - in: query\\\\n name: filter\\\\n description: Filtering condition\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: fields\\\\n description: Fields to export\\\\n required: true\\\\n schema:\\\\n type: array\\\\n items: *ref_0\\\\n - in: query\\\\n name: timezone\\\\n description: Convert times to this timezone\\\\n required: false\\\\n schema: *ref_0\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/exec/{procedure}':\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: Executes server-side procedure over one or more module records\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: procedure\\\\n description: Name of procedure to execute\\\\n required: true\\\\n schema: *ref_0\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_19\\\\n args:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n name:\\\\n type: string\\\\n value:\\\\n type: string\\\\n description: Procedure arguments\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_19\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}':\\\\n get:\\\\n tags:\\\\n - Records\\\\n summary: Read records by ID from module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: recordID\\\\n description: Record ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: Update records in module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: recordID\\\\n description: Record ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_22\\\\n values:\\\\n type: array\\\\n items: *ref_20\\\\n description: Record values\\\\n records:\\\\n type: array\\\\n items: *ref_21\\\\n description: Records\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_22\\\\n delete:\\\\n tags:\\\\n - Records\\\\n summary: Delete record row from module section\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: recordID\\\\n description: Record ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/attachment':\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: Uploads attachment and validates it against record field requirements\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_23\\\\n recordID:\\\\n type: string\\\\n description: Record ID\\\\n fieldName:\\\\n type: string\\\\n description: Field name\\\\n upload:\\\\n type: string\\\\n format: binary\\\\n description: File to upload\\\\n required:\\\\n - fieldName\\\\n - upload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_23\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/{recordID}/trigger':\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: 'Fire compose:record trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: recordID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_24\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n values:\\\\n type: array\\\\n items: *ref_20\\\\n description: Record values\\\\n required:\\\\n - script\\\\n - values\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_24\\\\n '/namespace/{namespaceID}/module/{moduleID}/record/trigger':\\\\n post:\\\\n tags:\\\\n - Records\\\\n summary: 'Fire compose:record trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_25\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_25\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: moduleID\\\\n description: Module ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/chart/':\\\\n get:\\\\n tags:\\\\n - Charts\\\\n summary: List/read charts\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query to match against charts\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: handle\\\\n description: Search charts by handle\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Charts\\\\n summary: 'List/read charts '\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_26\\\\n config:\\\\n type: string\\\\n format: json\\\\n description: Chart JSON\\\\n name:\\\\n type: string\\\\n description: Chart name\\\\n handle:\\\\n type: string\\\\n description: Chart handle\\\\n required:\\\\n - config\\\\n - name\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_26\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/chart/{chartID}':\\\\n get:\\\\n tags:\\\\n - Charts\\\\n summary: Read charts by ID\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: chartID\\\\n description: Chart ID\\\\n required: true\\\\n schema: *ref_2\\\\n post:\\\\n tags:\\\\n - Charts\\\\n summary: Add/update charts\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: chartID\\\\n description: Chart ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_27\\\\n config:\\\\n type: string\\\\n format: json\\\\n description: Chart JSON\\\\n name:\\\\n type: string\\\\n description: Chart name\\\\n handle:\\\\n type: string\\\\n description: Chart handle\\\\n updatedAt:\\\\n type: string\\\\n format: date-time\\\\n description: Last update (or creation) date\\\\n required:\\\\n - config\\\\n - name\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_27\\\\n delete:\\\\n tags:\\\\n - Charts\\\\n summary: Delete chart\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: chartID\\\\n description: Chart ID\\\\n required: true\\\\n schema: *ref_2\\\\n /notification/email:\\\\n post:\\\\n tags:\\\\n - Notifications\\\\n summary: Send email from the Compose\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_28\\\\n to:\\\\n type: array\\\\n items: *ref_0\\\\n description: Email addresses\\\\n cc:\\\\n type: array\\\\n items: *ref_0\\\\n description: Email addresses\\\\n replyTo:\\\\n type: string\\\\n description: Email address in reply-to field\\\\n subject:\\\\n type: string\\\\n description: Email subject\\\\n content:\\\\n type: string\\\\n format: json\\\\n description: Message content\\\\n remoteAttachments:\\\\n type: array\\\\n items: *ref_0\\\\n description: Remote files to attach to the email\\\\n required:\\\\n - to\\\\n - content\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_28\\\\n '/namespace/{namespaceID}/attachment/{kind}/':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: 'List, filter all page attachments'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: pageID\\\\n description: Filter attachments by page ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: moduleID\\\\n description: Filter attachments by module ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: recordID\\\\n description: Filter attachments by record ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: fieldName\\\\n description: Filter attachments by field name\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: offset\\\\n description: Offset\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: page\\\\n description: Page number (1-based)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: perPage\\\\n description: Returned items per page (default 50)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: path\\\\n name: kind\\\\n description: Attachment kind\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Attachment details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Attachment kind\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_2\\\\n delete:\\\\n tags:\\\\n - Attachments\\\\n summary: Delete attachment\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Attachment kind\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_2\\\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/original/{name}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Attachment kind\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: name\\\\n description: File name\\\\n required: true\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: download\\\\n description: Force file download\\\\n required: false\\\\n schema: &ref_30\\\\n type: boolean\\\\n '/namespace/{namespaceID}/attachment/{kind}/{attachmentID}/preview.{ext}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves preview of an attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Attachment kind\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: namespaceID\\\\n description: Namespace ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_2\\\\n - in: path\\\\n name: ext\\\\n description: Preview extension/format\\\\n required: true\\\\n schema: *ref_0\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_0\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_2\\\\n /permissions/:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve defined permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /permissions/effective:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Effective rules for current user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: resource\\\\n description: Show only rules for a specific resource\\\\n required: false\\\\n schema: *ref_0\\\\n '/permissions/{roleID}/rules':\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_2\\\\n delete:\\\\n tags:\\\\n - Permissions\\\\n summary: Remove all defined role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_2\\\\n patch:\\\\n tags:\\\\n - Permissions\\\\n summary: Update permission settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_29\\\\n rules:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n roleID:\\\\n type: string\\\\n format: uuid\\\\n resource:\\\\n type: string\\\\n operation:\\\\n type: string\\\\n access:\\\\n type: string\\\\n description: List of permission rules to set\\\\n required:\\\\n - rules\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_29\\\\n /automation/:\\\\n get:\\\\n tags:\\\\n - Compose automation scripts\\\\n summary: List all available automation scripts for compose resources\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: resourceTypePrefixes\\\\n description: Filter by resource prefix\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_0\\\\n - in: query\\\\n name: resourceTypes\\\\n description: Filter by resource type\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_0\\\\n - in: query\\\\n name: eventTypes\\\\n description: Filter by event type\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_0\\\\n - in: query\\\\n name: excludeInvalid\\\\n description: Exclude scripts that can not be used (errors)\\\\n required: false\\\\n schema: *ref_30\\\\n - in: query\\\\n name: excludeClientScripts\\\\n description: Do not include client scripts\\\\n required: false\\\\n schema: *ref_30\\\\n - in: query\\\\n name: excludeServerScripts\\\\n description: Do not include server scripts\\\\n required: false\\\\n schema: *ref_30\\\\n '/automation/{bundle}-{type}.{ext}':\\\\n get:\\\\n tags:\\\\n - Compose automation scripts\\\\n summary: Serves client scripts bundle\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: bundle\\\\n description: Name of the bundle\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: type\\\\n description: Bundle type\\\\n required: true\\\\n schema: *ref_0\\\\n - in: path\\\\n name: ext\\\\n description: Bundle extension\\\\n required: true\\\\n schema: *ref_0\\\\n /automation/trigger:\\\\n post:\\\\n tags:\\\\n - Compose automation scripts\\\\n summary: Triggers execution of a specific script on a system service level\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_31\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_31\\\\nPK\\\\x07\\\\x08\\\\xf4\\\\xc4\\\\xa2\\\\x1d\\\\xdb\\\\xc9\\\\x00\\\\x00\\\\xdb\\\\xc9\\\\x00\\\\x00PK\\\\x03\\\\x04\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\n\\\\x00 \\\\x00index.htmlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8\\\\n\\\\n\\\\n \\\\n \\\\n Corteza Server REST API Documentation\\\\n \\\\n \\\\n \\\\n \\\\n \\\\n\\\\n \\\\n
\\\\n \\\\n \\\\n\\\\n \\\\n \\\\n\\\\nPK\\\\x07\\\\x08;\\\\xaaT,B\\\\x07\\\\x00\\\\x00B\\\\x07\\\\x00\\\\x00PK\\\\x03\\\\x04\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x0e\\\\x00 \\\\x00messaging.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8openapi: 3.0.0\\\\ninfo:\\\\n title: Corteza messaging API\\\\n description: Corteza messaging REST API definition\\\\n version: 2020.9\\\\n contact:\\\\n email: info@cortezaproject.org\\\\n license:\\\\n name: Apache 2.0\\\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\\\npaths:\\\\n /commands/:\\\\n get:\\\\n tags:\\\\n - Commands\\\\n summary: List of available commands\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /status/:\\\\n get:\\\\n tags:\\\\n - Status\\\\n summary: See all current statuses\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n post:\\\\n tags:\\\\n - Status\\\\n summary: Set user's status\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_0\\\\n icon:\\\\n type: string\\\\n description: Status icon\\\\n message:\\\\n type: string\\\\n description: Status message\\\\n expires:\\\\n type: string\\\\n description: >-\\\\n Clear status when it expires (eg: when-active, afternoon,\\\\n tomorrow 1h, 30m, 1 PM, 2019-05-20)\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_0\\\\n delete:\\\\n tags:\\\\n - Status\\\\n summary: Clear status\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /activity/:\\\\n post:\\\\n tags:\\\\n - User activity\\\\n summary: >-\\\\n Sends user's activity to all subscribers; globally or per\\\\n channel/message.\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_1\\\\n channelID:\\\\n type: string\\\\n description: >-\\\\n Channel ID, if set, activity will be send only to subscribed\\\\n users\\\\n messageID:\\\\n type: string\\\\n description: 'Message ID, if set, channelID must be set as well'\\\\n kind:\\\\n type: string\\\\n description: Arbitrary string\\\\n required:\\\\n - kind\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_1\\\\n /channels/:\\\\n get:\\\\n tags:\\\\n - Channels\\\\n summary: List channels\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: &ref_2\\\\n type: string\\\\n post:\\\\n tags:\\\\n - Channels\\\\n summary: Create new channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_3\\\\n name:\\\\n type: string\\\\n description: Name of Channel\\\\n topic:\\\\n type: string\\\\n description: Subject of Channel\\\\n type:\\\\n type: string\\\\n description: Channel type\\\\n membershipPolicy:\\\\n type: string\\\\n description: 'Membership policy (eg: featured, forced)?'\\\\n members:\\\\n type: array\\\\n items: *ref_2\\\\n description: Initial members of the channel\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_3\\\\n '/channels/{channelID}':\\\\n put:\\\\n tags:\\\\n - Channels\\\\n summary: Update channel details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: &ref_5\\\\n type: string\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_4\\\\n name:\\\\n type: string\\\\n description: Name of Channel\\\\n topic:\\\\n type: string\\\\n description: Subject of Channel\\\\n membershipPolicy:\\\\n type: string\\\\n description: 'Membership policy (eg: featured, forced)?'\\\\n type:\\\\n type: string\\\\n description: Channel type\\\\n organisationID:\\\\n type: string\\\\n description: Move channel to different organisation\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_4\\\\n get:\\\\n tags:\\\\n - Channels\\\\n summary: Read channel details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/state':\\\\n put:\\\\n tags:\\\\n - Channels\\\\n summary: Update channel state\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_6\\\\n state:\\\\n type: string\\\\n description: 'Valid values: delete, undelete, archive, unarchive'\\\\n required:\\\\n - state\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_6\\\\n '/channels/{channelID}/flag':\\\\n put:\\\\n tags:\\\\n - Channels\\\\n summary: Update channel membership flag\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_7\\\\n flag:\\\\n type: string\\\\n description: 'Valid values: pinned, hidden, ignored'\\\\n required:\\\\n - flag\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_7\\\\n delete:\\\\n tags:\\\\n - Channels\\\\n summary: Remove channel membership flag\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/members':\\\\n get:\\\\n tags:\\\\n - Channels\\\\n summary: List channel members\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/members/{userID}':\\\\n put:\\\\n tags:\\\\n - Channels\\\\n summary: Join channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: userID\\\\n description: Member ID\\\\n required: true\\\\n schema: *ref_5\\\\n delete:\\\\n tags:\\\\n - Channels\\\\n summary: Remove member from channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: userID\\\\n description: Member ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/invite':\\\\n post:\\\\n tags:\\\\n - Channels\\\\n summary: Join channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_8\\\\n userID:\\\\n type: array\\\\n items: *ref_2\\\\n description: User ID\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_8\\\\n '/channels/{channelID}/attach':\\\\n post:\\\\n tags:\\\\n - Channels\\\\n summary: Attach file to channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_9\\\\n replyTo:\\\\n type: string\\\\n description: Upload as a reply\\\\n upload:\\\\n type: string\\\\n format: binary\\\\n description: File to upload\\\\n required:\\\\n - upload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_9\\\\n '/channels/{channelID}/messages/':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: Post new message to the channel\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_10\\\\n message:\\\\n type: string\\\\n description: Message contents (markdown)\\\\n required:\\\\n - message\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_10\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/messages/command/{command}/exec':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: Execute command\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: command\\\\n description: Command to be executed\\\\n required: true\\\\n schema: *ref_2\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_11\\\\n input:\\\\n type: string\\\\n description: Arbitrary command input\\\\n params:\\\\n type: array\\\\n items: *ref_2\\\\n description: Command parameters\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_11\\\\n '/channels/{channelID}/messages/mark-as-read':\\\\n get:\\\\n tags:\\\\n - Messages\\\\n summary: Manages read/unread messages in a channel or a thread\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: query\\\\n name: threadID\\\\n description: 'ID of thread (messageID) '\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: lastReadMessageID\\\\n description: ID of the last read message\\\\n required: false\\\\n schema: *ref_5\\\\n '/channels/{channelID}/messages/{messageID}':\\\\n put:\\\\n tags:\\\\n - Messages\\\\n summary: Edit existing message\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_12\\\\n message:\\\\n type: string\\\\n description: Message contents (markdown)\\\\n required:\\\\n - message\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_12\\\\n delete:\\\\n tags:\\\\n - Messages\\\\n summary: Delete existing message\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/messages/{messageID}/replies':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: Reply to a message\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_13\\\\n message:\\\\n type: string\\\\n description: Message contents (markdown)\\\\n required:\\\\n - message\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_13\\\\n '/channels/{channelID}/messages/{messageID}/pin':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: Pin message to channel (public bookmark)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n delete:\\\\n tags:\\\\n - Messages\\\\n summary: Pin message to channel (public bookmark)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/messages/{messageID}/bookmark':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: Bookmark a message (private bookmark)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n delete:\\\\n tags:\\\\n - Messages\\\\n summary: Remove boomark from message (private bookmark)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n '/channels/{channelID}/messages/{messageID}/reaction/{reaction}':\\\\n post:\\\\n tags:\\\\n - Messages\\\\n summary: React to a message\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: reaction\\\\n description: Reaction\\\\n required: true\\\\n schema: *ref_2\\\\n delete:\\\\n tags:\\\\n - Messages\\\\n summary: Delete reaction from a message\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: channelID\\\\n description: Channel ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: messageID\\\\n description: Message ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: reaction\\\\n description: Reaction\\\\n required: true\\\\n schema: *ref_2\\\\n '/attachment/{attachmentID}/original/{name}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: name\\\\n description: File name\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: query\\\\n name: download\\\\n description: Force file download\\\\n required: false\\\\n schema: &ref_14\\\\n type: boolean\\\\n '/attachment/{attachmentID}/preview.{ext}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves preview of an attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_5\\\\n - in: path\\\\n name: ext\\\\n description: Preview extension/format\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: true\\\\n schema: *ref_2\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_5\\\\n /search/messages:\\\\n get:\\\\n tags:\\\\n - Search entry point\\\\n summary: Search for messages\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: channelID\\\\n description: Filter by channels\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_2\\\\n - in: query\\\\n name: afterMessageID\\\\n description: ID of the first message in the list (exclusive)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: beforeMessageID\\\\n description: ID of the last message in the list (exclusive)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: fromMessageID\\\\n description: ID of the first message in the list (inclusive)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: toMessageID\\\\n description: ID of the last message the list (inclusive)\\\\n required: false\\\\n schema: *ref_5\\\\n - in: query\\\\n name: threadID\\\\n description: Filter by thread message ID\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_2\\\\n - in: query\\\\n name: userID\\\\n description: Filter by one or more user\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_2\\\\n - in: query\\\\n name: type\\\\n description: 'Filter by message type (text, inlineImage, attachment, ...)'\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_2\\\\n - in: query\\\\n name: pinnedOnly\\\\n description: Return only pinned messages\\\\n required: false\\\\n schema: *ref_14\\\\n - in: query\\\\n name: bookmarkedOnly\\\\n description: Only bookmarked messages\\\\n required: false\\\\n schema: *ref_14\\\\n - in: query\\\\n name: limit\\\\n description: Max number of messages\\\\n required: false\\\\n schema: &ref_15\\\\n type: string\\\\n /search/threads:\\\\n get:\\\\n tags:\\\\n - Search entry point\\\\n summary: Search for threads\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: *ref_2\\\\n - in: query\\\\n name: channelID\\\\n description: Filter by channels\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_2\\\\n - in: query\\\\n name: limit\\\\n description: Max number of messages\\\\n required: false\\\\n schema: *ref_15\\\\n /permissions/:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve defined permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /permissions/effective:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Effective rules for current user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: resource\\\\n description: Show only rules for a specific resource\\\\n required: false\\\\n schema: *ref_2\\\\n '/permissions/{roleID}/rules':\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_5\\\\n delete:\\\\n tags:\\\\n - Permissions\\\\n summary: Remove all defined role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_5\\\\n patch:\\\\n tags:\\\\n - Permissions\\\\n summary: Update permission settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_5\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_16\\\\n rules:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n roleID:\\\\n type: string\\\\n format: uuid\\\\n resource:\\\\n type: string\\\\n operation:\\\\n type: string\\\\n access:\\\\n type: string\\\\n description: List of permission rules to set\\\\n required:\\\\n - rules\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_16\\\\nPK\\\\x07\\\\x08\\\\x83J.D\\\\x82^\\\\x00\\\\x00\\\\x82^\\\\x00\\\\x00PK\\\\x03\\\\x04\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x0b\\\\x00 \\\\x00system.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8openapi: 3.0.0\\\\ninfo:\\\\n title: Corteza System API\\\\n description: Corteza System REST API definition\\\\n version: 2020.9\\\\n contact:\\\\n email: info@cortezaproject.org\\\\n license:\\\\n name: Apache 2.0\\\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\\\npaths:\\\\n /auth/:\\\\n get:\\\\n tags:\\\\n - Authentication\\\\n summary: Returns auth settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /auth/check:\\\\n get:\\\\n tags:\\\\n - Authentication\\\\n summary: Check JWT token\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /auth/impersonate:\\\\n post:\\\\n tags:\\\\n - Authentication\\\\n summary: Impersonate a user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_0\\\\n userID:\\\\n type: string\\\\n description: ID of the impersonated user\\\\n required:\\\\n - userID\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_0\\\\n /auth/exchange:\\\\n post:\\\\n tags:\\\\n - Authentication\\\\n summary: Exchange auth token for JWT\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_1\\\\n token:\\\\n type: string\\\\n description: Token to be exchanged for JWT\\\\n required:\\\\n - token\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_1\\\\n /auth/logout:\\\\n get:\\\\n tags:\\\\n - Authentication\\\\n summary: Logout\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /auth/internal/login:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: Login user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_2\\\\n email:\\\\n type: string\\\\n description: Email\\\\n password:\\\\n type: string\\\\n format: password\\\\n description: Password\\\\n required:\\\\n - email\\\\n - password\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_2\\\\n /auth/internal/signup:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: User signup/registration\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_3\\\\n email:\\\\n type: string\\\\n description: Email\\\\n username:\\\\n type: string\\\\n description: Username\\\\n password:\\\\n type: string\\\\n format: password\\\\n description: Password\\\\n handle:\\\\n type: string\\\\n description: User handle\\\\n name:\\\\n type: string\\\\n description: Display name\\\\n required:\\\\n - email\\\\n - password\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_3\\\\n /auth/internal/request-password-reset:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: Request password reset token (via email)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_4\\\\n email:\\\\n type: string\\\\n description: Email\\\\n required:\\\\n - email\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_4\\\\n /auth/internal/exchange-password-reset-token:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: Exchange password reset token for new token and user info\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_5\\\\n token:\\\\n type: string\\\\n description: Token\\\\n required:\\\\n - token\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_5\\\\n /auth/internal/reset-password:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: Reset password with exchanged password reset token\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_6\\\\n token:\\\\n type: string\\\\n description: Token\\\\n password:\\\\n type: string\\\\n format: password\\\\n description: Password\\\\n required:\\\\n - token\\\\n - password\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_6\\\\n /auth/internal/confirm-email:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: Confirm email with token\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_7\\\\n token:\\\\n type: string\\\\n description: Token\\\\n required:\\\\n - token\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_7\\\\n /auth/internal/change-password:\\\\n post:\\\\n tags:\\\\n - Internal authentication\\\\n summary: 'Changes password for current user, requires current password'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_8\\\\n oldPassword:\\\\n type: string\\\\n description: Old password\\\\n newPassword:\\\\n type: string\\\\n description: New password\\\\n required:\\\\n - oldPassword\\\\n - newPassword\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_8\\\\n /settings/:\\\\n get:\\\\n tags:\\\\n - Settings\\\\n summary: List settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: prefix\\\\n description: Key prefix\\\\n required: false\\\\n schema: &ref_10\\\\n type: string\\\\n patch:\\\\n tags:\\\\n - Settings\\\\n summary: Update settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_9\\\\n values:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n name:\\\\n type: string\\\\n value:\\\\n type: string\\\\n description: >-\\\\n Array of new settings: `[{ name: ..., value: ... }]`. Omit\\\\n value to remove setting\\\\n required:\\\\n - values\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_9\\\\n '/settings/{key}':\\\\n get:\\\\n tags:\\\\n - Settings\\\\n summary: Get a value for a key\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: key\\\\n description: Setting key\\\\n required: true\\\\n schema: *ref_10\\\\n - in: query\\\\n name: ownerID\\\\n description: Owner ID\\\\n required: false\\\\n schema: &ref_14\\\\n type: string\\\\n post:\\\\n tags:\\\\n - Settings\\\\n summary: Set value for specific setting\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: key\\\\n description: Key\\\\n required: true\\\\n schema: *ref_10\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_11\\\\n upload:\\\\n type: string\\\\n format: binary\\\\n description: File to upload\\\\n ownerID:\\\\n type: string\\\\n description: Owner ID\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_11\\\\n /settings/current:\\\\n get:\\\\n tags:\\\\n - Settings\\\\n summary: Current compose settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /subscription/:\\\\n get:\\\\n tags:\\\\n - Subscription\\\\n summary: Returns current subscription status\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /roles/:\\\\n get:\\\\n tags:\\\\n - Roles\\\\n summary: List roles\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: query\\\\n description: Search query\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: deleted\\\\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\\\\n required: false\\\\n schema: &ref_12\\\\n type: string\\\\n - in: query\\\\n name: archived\\\\n description: 'Exclude (0, default), include (1) or return only (2) achived roles'\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_10\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Update role details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_13\\\\n name:\\\\n type: string\\\\n description: Name of Role\\\\n handle:\\\\n type: string\\\\n description: Handle for Role\\\\n members:\\\\n type: array\\\\n items: *ref_10\\\\n description: Role member IDs\\\\n required:\\\\n - name\\\\n - handle\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_13\\\\n '/roles/{roleID}':\\\\n put:\\\\n tags:\\\\n - Roles\\\\n summary: Update role details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_15\\\\n name:\\\\n type: string\\\\n description: Name of Role\\\\n handle:\\\\n type: string\\\\n description: Handle for Role\\\\n members:\\\\n type: array\\\\n items: *ref_10\\\\n description: Role member IDs\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_15\\\\n get:\\\\n tags:\\\\n - Roles\\\\n summary: Read role details and memberships\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Roles\\\\n summary: Remove role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/archive':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Archive role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/unarchive':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Unarchive role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/undelete':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Undelete role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/move':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Move role to different organisation\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_16\\\\n organisationID:\\\\n type: string\\\\n description: Role ID\\\\n required:\\\\n - organisationID\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_16\\\\n '/roles/{roleID}/merge':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Merge one role into another\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Source Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_17\\\\n destination:\\\\n type: string\\\\n description: Destination Role ID\\\\n required:\\\\n - destination\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_17\\\\n '/roles/{roleID}/members':\\\\n get:\\\\n tags:\\\\n - Roles\\\\n summary: Returns all role members\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Source Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/member/{userID}':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: Add member to a role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Source Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Roles\\\\n summary: Remove member from a role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Source Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/roles/{roleID}/trigger':\\\\n post:\\\\n tags:\\\\n - Roles\\\\n summary: 'Fire system:role trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_18\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_18\\\\n /users/:\\\\n get:\\\\n tags:\\\\n - Users\\\\n summary: Search users (Directory)\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: userID\\\\n description: Filter by user ID\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: roleID\\\\n description: Filter by role membership\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: query\\\\n description: Search query to match against users\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: username\\\\n description: Search username to match against users\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: email\\\\n description: Search email to match against users\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: handle\\\\n description: Search handle to match against users\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: kind\\\\n description: 'Kind (normal, bot)'\\\\n required: false\\\\n schema:\\\\n type: string\\\\n - in: query\\\\n name: incDeleted\\\\n description: '[Deprecated] Include deleted users (requires ''access'' permission)'\\\\n required: false\\\\n schema: &ref_19\\\\n type: boolean\\\\n - in: query\\\\n name: incSuspended\\\\n description: '[Deprecated] Include suspended users'\\\\n required: false\\\\n schema: *ref_19\\\\n - in: query\\\\n name: deleted\\\\n description: 'Exclude (0, default), include (1) or return only (2) deleted users'\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: suspended\\\\n description: 'Exclude (0, default), include (1) or return only (2) suspended users'\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_10\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Create user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_20\\\\n email:\\\\n type: string\\\\n description: Email\\\\n name:\\\\n type: string\\\\n description: Name\\\\n handle:\\\\n type: string\\\\n description: Handle\\\\n kind:\\\\n type: string\\\\n description: 'Kind (normal, bot)'\\\\n required:\\\\n - email\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_20\\\\n '/users/{userID}':\\\\n put:\\\\n tags:\\\\n - Users\\\\n summary: Update user details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_21\\\\n email:\\\\n type: string\\\\n description: Email\\\\n name:\\\\n type: string\\\\n description: Name\\\\n handle:\\\\n type: string\\\\n description: Handle\\\\n kind:\\\\n type: string\\\\n description: 'Kind (normal, bot)'\\\\n required:\\\\n - email\\\\n - name\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_21\\\\n get:\\\\n tags:\\\\n - Users\\\\n summary: Read user details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Users\\\\n summary: Remove user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/suspend':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Suspend user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/unsuspend':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Unsuspend user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/undelete':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Undelete user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/password':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Set's or changes user's password\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_22\\\\n password:\\\\n type: string\\\\n format: password\\\\n description: New password\\\\n required:\\\\n - password\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_22\\\\n '/users/{userID}/membership':\\\\n get:\\\\n tags:\\\\n - Users\\\\n summary: Add member to a role\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/membership/{roleID}':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: Add role to a user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Users\\\\n summary: Remove role from a user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: userID\\\\n description: User ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/users/{userID}/trigger':\\\\n post:\\\\n tags:\\\\n - Users\\\\n summary: 'Fire system:user trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: userID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_23\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_23\\\\n /application/:\\\\n get:\\\\n tags:\\\\n - Applications\\\\n summary: List applications\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: name\\\\n description: Application name\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: query\\\\n description: Filter applications\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: deleted\\\\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_10\\\\n post:\\\\n tags:\\\\n - Applications\\\\n summary: Create application\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_24\\\\n name:\\\\n type: string\\\\n description: Application name\\\\n enabled:\\\\n type: boolean\\\\n description: Enabled\\\\n unify:\\\\n type: string\\\\n format: json\\\\n description: Unify properties\\\\n config:\\\\n type: string\\\\n format: json\\\\n description: Arbitrary JSON holding application configuration\\\\n required:\\\\n - name\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_24\\\\n '/application/{applicationID}':\\\\n put:\\\\n tags:\\\\n - Applications\\\\n summary: Update user details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: applicationID\\\\n description: Application ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_25\\\\n name:\\\\n type: string\\\\n description: Email\\\\n enabled:\\\\n type: boolean\\\\n description: Enabled\\\\n unify:\\\\n type: string\\\\n format: json\\\\n description: Unify properties\\\\n config:\\\\n type: string\\\\n format: json\\\\n description: Arbitrary JSON holding application configuration\\\\n required:\\\\n - name\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_25\\\\n get:\\\\n tags:\\\\n - Applications\\\\n summary: Read application details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: applicationID\\\\n description: Application ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Applications\\\\n summary: Remove application\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: applicationID\\\\n description: Application ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/application/{applicationID}/undelete':\\\\n post:\\\\n tags:\\\\n - Applications\\\\n summary: Undelete application\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: applicationID\\\\n description: Application ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/application/{applicationID}/trigger':\\\\n post:\\\\n tags:\\\\n - Applications\\\\n summary: 'Fire system:application trigger'\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: applicationID\\\\n description: ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_26\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_26\\\\n /permissions/:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve defined permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /permissions/effective:\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Effective rules for current user\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: resource\\\\n description: Show only rules for a specific resource\\\\n required: false\\\\n schema: *ref_10\\\\n '/permissions/{roleID}/rules':\\\\n get:\\\\n tags:\\\\n - Permissions\\\\n summary: Retrieve role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Permissions\\\\n summary: Remove all defined role permissions\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n patch:\\\\n tags:\\\\n - Permissions\\\\n summary: Update permission settings\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: roleID\\\\n description: Role ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_27\\\\n rules:\\\\n type: array\\\\n items:\\\\n type: object\\\\n properties:\\\\n roleID:\\\\n type: string\\\\n format: uuid\\\\n resource:\\\\n type: string\\\\n operation:\\\\n type: string\\\\n access:\\\\n type: string\\\\n description: List of permission rules to set\\\\n required:\\\\n - rules\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_27\\\\n /reminder/:\\\\n get:\\\\n tags:\\\\n - Reminders\\\\n summary: List/read reminders\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: reminderID\\\\n description: Filter by reminder ID\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: resource\\\\n description: Only reminders of a specific resource\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: assignedTo\\\\n description: Only reminders for a given user\\\\n required: false\\\\n schema: *ref_14\\\\n - in: query\\\\n name: scheduledFrom\\\\n description: Only reminders from this time (included)\\\\n required: false\\\\n schema: &ref_28\\\\n type: string\\\\n format: date-time\\\\n - in: query\\\\n name: scheduledUntil\\\\n description: Only reminders up to this time (included)\\\\n required: false\\\\n schema: *ref_28\\\\n - in: query\\\\n name: scheduledOnly\\\\n description: Only scheduled reminders\\\\n required: false\\\\n schema: *ref_19\\\\n - in: query\\\\n name: excludeDismissed\\\\n description: Filter out dismissed reminders\\\\n required: false\\\\n schema: *ref_19\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sort\\\\n description: Sort items\\\\n required: false\\\\n schema: *ref_10\\\\n post:\\\\n tags:\\\\n - Reminders\\\\n summary: Add new reminder\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_29\\\\n resource:\\\\n type: string\\\\n description: Resource\\\\n assignedTo:\\\\n type: string\\\\n description: Assigned To\\\\n payload:\\\\n type: string\\\\n format: json\\\\n description: Payload\\\\n remindAt:\\\\n type: string\\\\n format: date-time\\\\n description: Remind At\\\\n required:\\\\n - resource\\\\n - assignedTo\\\\n - payload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_29\\\\n '/reminder/{reminderID}':\\\\n put:\\\\n tags:\\\\n - Reminders\\\\n summary: Update reminder\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: reminderID\\\\n description: Reminder ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_30\\\\n resource:\\\\n type: string\\\\n description: Resource\\\\n assignedTo:\\\\n type: string\\\\n description: Assigned To\\\\n payload:\\\\n type: string\\\\n format: json\\\\n description: Payload\\\\n remindAt:\\\\n type: string\\\\n format: date-time\\\\n description: Remind At\\\\n required:\\\\n - resource\\\\n - assignedTo\\\\n - payload\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_30\\\\n get:\\\\n tags:\\\\n - Reminders\\\\n summary: Read reminder by ID\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: reminderID\\\\n description: Reminder ID\\\\n required: true\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Reminders\\\\n summary: Delete reminder\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: reminderID\\\\n description: Reminder ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/reminder/{reminderID}/dismiss':\\\\n patch:\\\\n tags:\\\\n - Reminders\\\\n summary: Dismiss reminder\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: reminderID\\\\n description: reminder ID\\\\n required: true\\\\n schema: *ref_14\\\\n '/reminder/{reminderID}/snooze':\\\\n patch:\\\\n tags:\\\\n - Reminders\\\\n summary: Snooze reminder\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: reminderID\\\\n description: reminder ID\\\\n required: true\\\\n schema: *ref_14\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_31\\\\n remindAt:\\\\n type: string\\\\n format: date-time\\\\n description: New Remind At Time\\\\n required:\\\\n - remindAt\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_31\\\\n '/attachment/{kind}/{attachmentID}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Attachment details\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Kind\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_14\\\\n delete:\\\\n tags:\\\\n - Attachments\\\\n summary: Delete attachment\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Kind\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_14\\\\n '/attachment/{kind}/{attachmentID}/original/{name}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Kind\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: name\\\\n description: File name\\\\n required: true\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_14\\\\n - in: query\\\\n name: download\\\\n description: Force file download\\\\n required: false\\\\n schema: *ref_19\\\\n '/attachment/{kind}/{attachmentID}/preview.{ext}':\\\\n get:\\\\n tags:\\\\n - Attachments\\\\n summary: Serves preview of an attached file\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: kind\\\\n description: Kind\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: attachmentID\\\\n description: Attachment ID\\\\n required: true\\\\n schema: *ref_14\\\\n - in: path\\\\n name: ext\\\\n description: Preview extension/format\\\\n required: true\\\\n schema: *ref_10\\\\n - in: query\\\\n name: sign\\\\n description: Signature\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: userID\\\\n description: User ID\\\\n required: false\\\\n schema: *ref_14\\\\n /stats/:\\\\n get:\\\\n tags:\\\\n - Statistics\\\\n summary: List system statistics\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n /automation/:\\\\n get:\\\\n tags:\\\\n - System automation scripts\\\\n summary: List all available automation scripts for system resources\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: resourceTypePrefixes\\\\n description: Filter by resource prefix\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: resourceTypes\\\\n description: Filter by resource type\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: eventTypes\\\\n description: Filter by event type\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: excludeInvalid\\\\n description: Exclude scripts that can not be used (errors)\\\\n required: false\\\\n schema: *ref_19\\\\n - in: query\\\\n name: excludeClientScripts\\\\n description: Do not include client scripts\\\\n required: false\\\\n schema: *ref_19\\\\n - in: query\\\\n name: excludeServerScripts\\\\n description: Do not include server scripts\\\\n required: false\\\\n schema: *ref_19\\\\n '/automation/{bundle}-{type}.{ext}':\\\\n get:\\\\n tags:\\\\n - System automation scripts\\\\n summary: Serves client scripts bundle\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: path\\\\n name: bundle\\\\n description: Name of the bundle\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: type\\\\n description: Bundle type\\\\n required: true\\\\n schema: *ref_10\\\\n - in: path\\\\n name: ext\\\\n description: Bundle extension\\\\n required: true\\\\n schema: *ref_10\\\\n /automation/trigger:\\\\n post:\\\\n tags:\\\\n - System automation scripts\\\\n summary: Triggers execution of a specific script on a system service level\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n requestBody:\\\\n content:\\\\n application/json:\\\\n schema:\\\\n type: object\\\\n properties: &ref_32\\\\n script:\\\\n type: string\\\\n description: Script to execute\\\\n required:\\\\n - script\\\\n application/x-www-form-urlencoded:\\\\n schema:\\\\n type: object\\\\n properties: *ref_32\\\\n /actionlog/:\\\\n get:\\\\n tags:\\\\n - Action log\\\\n summary: Action log events\\\\n responses:\\\\n '200':\\\\n description: OK\\\\n parameters:\\\\n - in: query\\\\n name: from\\\\n description: From\\\\n required: false\\\\n schema: *ref_28\\\\n - in: query\\\\n name: to\\\\n description: To\\\\n required: false\\\\n schema: *ref_28\\\\n - in: query\\\\n name: resource\\\\n description: Resource\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: action\\\\n description: Action\\\\n required: false\\\\n schema: *ref_10\\\\n - in: query\\\\n name: actorID\\\\n description: Filter by one or more actors\\\\n required: false\\\\n schema:\\\\n type: array\\\\n items: *ref_10\\\\n - in: query\\\\n name: limit\\\\n description: Limit\\\\n required: false\\\\n schema: *ref_12\\\\n - in: query\\\\n name: pageCursor\\\\n description: Page cursor\\\\n required: false\\\\n schema: *ref_10\\\\nPK\\\\x07\\\\x08\\\\x1c\\\\xc1\\\\xc8\\\\xd4H\\\\xb1\\\\x00\\\\x00H\\\\xb1\\\\x00\\\\x00PK\\\\x01\\\\x02\\\\x14\\\\x03\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!($jr\\\\x0dN\\\\x03\\\\x00\\\\x00N\\\\x03\\\\x00\\\\x00\\\\x0b\\\\x00 \\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\xa4\\\\x81\\\\x00\\\\x00\\\\x00\\\\x00README.adocUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8PK\\\\x01\\\\x02\\\\x14\\\\x03\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\xf4\\\\xc4\\\\xa2\\\\x1d\\\\xdb\\\\xc9\\\\x00\\\\x00\\\\xdb\\\\xc9\\\\x00\\\\x00\\\\x0c\\\\x00 \\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\xa4\\\\x81\\\\x90\\\\x03\\\\x00\\\\x00compose.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8PK\\\\x01\\\\x02\\\\x14\\\\x03\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(;\\\\xaaT,B\\\\x07\\\\x00\\\\x00B\\\\x07\\\\x00\\\\x00\\\\n\\\\x00 \\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\xa4\\\\x81\\\\xae\\\\xcd\\\\x00\\\\x00index.htmlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8PK\\\\x01\\\\x02\\\\x14\\\\x03\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x83J.D\\\\x82^\\\\x00\\\\x00\\\\x82^\\\\x00\\\\x00\\\\x0e\\\\x00 \\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\xa4\\\\x811\\\\xd5\\\\x00\\\\x00messaging.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8PK\\\\x01\\\\x02\\\\x14\\\\x03\\\\x14\\\\x00\\\\x08\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00!(\\\\x1c\\\\xc1\\\\xc8\\\\xd4H\\\\xb1\\\\x00\\\\x00H\\\\xb1\\\\x00\\\\x00\\\\x0b\\\\x00 \\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\xa4\\\\x81\\\\xf83\\\\x01\\\\x00system.yamlUT\\\\x05\\\\x00\\\\x01\\\\x80Cm8PK\\\\x05\\\\x06\\\\x00\\\\x00\\\\x00\\\\x00\\\\x05\\\\x00\\\\x05\\\\x00M\\\\x01\\\\x00\\\\x00\\\\x82\\\\xe5\\\\x01\\\\x00\\\\x00\\\\x00\\\"\\nPK\\x07\\x086\\xc2Y\\x9d\\xe1\\xfe\\x01\\x00\\xe1\\xfe\\x01\\x00PK\\x03\\x04\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0b\\x00 \\x00system.yamlUT\\x05\\x00\\x01\\x80Cm8openapi: 3.0.0\\ninfo:\\n title: Corteza System API\\n description: Corteza System REST API definition\\n version: 2020.9\\n contact:\\n email: info@cortezaproject.org\\n license:\\n name: Apache 2.0\\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\\npaths:\\n /auth/:\\n get:\\n tags:\\n - Authentication\\n summary: Returns auth settings\\n responses:\\n '200':\\n description: OK\\n /auth/check:\\n get:\\n tags:\\n - Authentication\\n summary: Check JWT token\\n responses:\\n '200':\\n description: OK\\n /auth/impersonate:\\n post:\\n tags:\\n - Authentication\\n summary: Impersonate a user\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_0\\n userID:\\n type: string\\n description: ID of the impersonated user\\n required:\\n - userID\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_0\\n /auth/exchange:\\n post:\\n tags:\\n - Authentication\\n summary: Exchange auth token for JWT\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_1\\n token:\\n type: string\\n description: Token to be exchanged for JWT\\n required:\\n - token\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_1\\n /auth/logout:\\n get:\\n tags:\\n - Authentication\\n summary: Logout\\n responses:\\n '200':\\n description: OK\\n /auth/internal/login:\\n post:\\n tags:\\n - Internal authentication\\n summary: Login user\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_2\\n email:\\n type: string\\n description: Email\\n password:\\n type: string\\n format: password\\n description: Password\\n required:\\n - email\\n - password\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_2\\n /auth/internal/signup:\\n post:\\n tags:\\n - Internal authentication\\n summary: User signup/registration\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_3\\n email:\\n type: string\\n description: Email\\n username:\\n type: string\\n description: Username\\n password:\\n type: string\\n format: password\\n description: Password\\n handle:\\n type: string\\n description: User handle\\n name:\\n type: string\\n description: Display name\\n required:\\n - email\\n - password\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_3\\n /auth/internal/request-password-reset:\\n post:\\n tags:\\n - Internal authentication\\n summary: Request password reset token (via email)\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_4\\n email:\\n type: string\\n description: Email\\n required:\\n - email\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_4\\n /auth/internal/exchange-password-reset-token:\\n post:\\n tags:\\n - Internal authentication\\n summary: Exchange password reset token for new token and user info\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_5\\n token:\\n type: string\\n description: Token\\n required:\\n - token\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_5\\n /auth/internal/reset-password:\\n post:\\n tags:\\n - Internal authentication\\n summary: Reset password with exchanged password reset token\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_6\\n token:\\n type: string\\n description: Token\\n password:\\n type: string\\n format: password\\n description: Password\\n required:\\n - token\\n - password\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_6\\n /auth/internal/confirm-email:\\n post:\\n tags:\\n - Internal authentication\\n summary: Confirm email with token\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_7\\n token:\\n type: string\\n description: Token\\n required:\\n - token\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_7\\n /auth/internal/change-password:\\n post:\\n tags:\\n - Internal authentication\\n summary: 'Changes password for current user, requires current password'\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_8\\n oldPassword:\\n type: string\\n description: Old password\\n newPassword:\\n type: string\\n description: New password\\n required:\\n - oldPassword\\n - newPassword\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_8\\n /settings/:\\n get:\\n tags:\\n - Settings\\n summary: List settings\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: prefix\\n description: Key prefix\\n required: false\\n schema: &ref_10\\n type: string\\n patch:\\n tags:\\n - Settings\\n summary: Update settings\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_9\\n values:\\n type: array\\n items:\\n type: object\\n properties:\\n name:\\n type: string\\n value:\\n type: string\\n description: >-\\n Array of new settings: `[{ name: ..., value: ... }]`. Omit\\n value to remove setting\\n required:\\n - values\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_9\\n '/settings/{key}':\\n get:\\n tags:\\n - Settings\\n summary: Get a value for a key\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: key\\n description: Setting key\\n required: true\\n schema: *ref_10\\n - in: query\\n name: ownerID\\n description: Owner ID\\n required: false\\n schema: &ref_14\\n type: string\\n post:\\n tags:\\n - Settings\\n summary: Set value for specific setting\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: key\\n description: Key\\n required: true\\n schema: *ref_10\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_11\\n upload:\\n type: string\\n format: binary\\n description: File to upload\\n ownerID:\\n type: string\\n description: Owner ID\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_11\\n /settings/current:\\n get:\\n tags:\\n - Settings\\n summary: Current compose settings\\n responses:\\n '200':\\n description: OK\\n /subscription/:\\n get:\\n tags:\\n - Subscription\\n summary: Returns current subscription status\\n responses:\\n '200':\\n description: OK\\n /roles/:\\n get:\\n tags:\\n - Roles\\n summary: List roles\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: query\\n description: Search query\\n required: false\\n schema: *ref_10\\n - in: query\\n name: deleted\\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\\n required: false\\n schema: &ref_12\\n type: string\\n - in: query\\n name: archived\\n description: 'Exclude (0, default), include (1) or return only (2) achived roles'\\n required: false\\n schema: *ref_12\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_12\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_10\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_10\\n post:\\n tags:\\n - Roles\\n summary: Update role details\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_13\\n name:\\n type: string\\n description: Name of Role\\n handle:\\n type: string\\n description: Handle for Role\\n members:\\n type: array\\n items: *ref_10\\n description: Role member IDs\\n required:\\n - name\\n - handle\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_13\\n '/roles/{roleID}':\\n put:\\n tags:\\n - Roles\\n summary: Update role details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_15\\n name:\\n type: string\\n description: Name of Role\\n handle:\\n type: string\\n description: Handle for Role\\n members:\\n type: array\\n items: *ref_10\\n description: Role member IDs\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_15\\n get:\\n tags:\\n - Roles\\n summary: Read role details and memberships\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Roles\\n summary: Remove role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/archive':\\n post:\\n tags:\\n - Roles\\n summary: Archive role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/unarchive':\\n post:\\n tags:\\n - Roles\\n summary: Unarchive role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/undelete':\\n post:\\n tags:\\n - Roles\\n summary: Undelete role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/move':\\n post:\\n tags:\\n - Roles\\n summary: Move role to different organisation\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_16\\n organisationID:\\n type: string\\n description: Role ID\\n required:\\n - organisationID\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_16\\n '/roles/{roleID}/merge':\\n post:\\n tags:\\n - Roles\\n summary: Merge one role into another\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Source Role ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_17\\n destination:\\n type: string\\n description: Destination Role ID\\n required:\\n - destination\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_17\\n '/roles/{roleID}/members':\\n get:\\n tags:\\n - Roles\\n summary: Returns all role members\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Source Role ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/member/{userID}':\\n post:\\n tags:\\n - Roles\\n summary: Add member to a role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Source Role ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Roles\\n summary: Remove member from a role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Source Role ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/roles/{roleID}/trigger':\\n post:\\n tags:\\n - Roles\\n summary: 'Fire system:role trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_18\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_18\\n /users/:\\n get:\\n tags:\\n - Users\\n summary: Search users (Directory)\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: userID\\n description: Filter by user ID\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: roleID\\n description: Filter by role membership\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: query\\n description: Search query to match against users\\n required: false\\n schema: *ref_10\\n - in: query\\n name: username\\n description: Search username to match against users\\n required: false\\n schema: *ref_10\\n - in: query\\n name: email\\n description: Search email to match against users\\n required: false\\n schema: *ref_10\\n - in: query\\n name: handle\\n description: Search handle to match against users\\n required: false\\n schema: *ref_10\\n - in: query\\n name: kind\\n description: 'Kind (normal, bot)'\\n required: false\\n schema:\\n type: string\\n - in: query\\n name: incDeleted\\n description: '[Deprecated] Include deleted users (requires ''access'' permission)'\\n required: false\\n schema: &ref_19\\n type: boolean\\n - in: query\\n name: incSuspended\\n description: '[Deprecated] Include suspended users'\\n required: false\\n schema: *ref_19\\n - in: query\\n name: deleted\\n description: 'Exclude (0, default), include (1) or return only (2) deleted users'\\n required: false\\n schema: *ref_12\\n - in: query\\n name: suspended\\n description: 'Exclude (0, default), include (1) or return only (2) suspended users'\\n required: false\\n schema: *ref_12\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_12\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_10\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_10\\n post:\\n tags:\\n - Users\\n summary: Create user\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_20\\n email:\\n type: string\\n description: Email\\n name:\\n type: string\\n description: Name\\n handle:\\n type: string\\n description: Handle\\n kind:\\n type: string\\n description: 'Kind (normal, bot)'\\n required:\\n - email\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_20\\n '/users/{userID}':\\n put:\\n tags:\\n - Users\\n summary: Update user details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_21\\n email:\\n type: string\\n description: Email\\n name:\\n type: string\\n description: Name\\n handle:\\n type: string\\n description: Handle\\n kind:\\n type: string\\n description: 'Kind (normal, bot)'\\n required:\\n - email\\n - name\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_21\\n get:\\n tags:\\n - Users\\n summary: Read user details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Users\\n summary: Remove user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/suspend':\\n post:\\n tags:\\n - Users\\n summary: Suspend user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/unsuspend':\\n post:\\n tags:\\n - Users\\n summary: Unsuspend user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/undelete':\\n post:\\n tags:\\n - Users\\n summary: Undelete user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/password':\\n post:\\n tags:\\n - Users\\n summary: Set's or changes user's password\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_22\\n password:\\n type: string\\n format: password\\n description: New password\\n required:\\n - password\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_22\\n '/users/{userID}/membership':\\n get:\\n tags:\\n - Users\\n summary: Add member to a role\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/membership/{roleID}':\\n post:\\n tags:\\n - Users\\n summary: Add role to a user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Users\\n summary: Remove role from a user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: userID\\n description: User ID\\n required: true\\n schema: *ref_14\\n '/users/{userID}/trigger':\\n post:\\n tags:\\n - Users\\n summary: 'Fire system:user trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: userID\\n description: ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_23\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_23\\n /application/:\\n get:\\n tags:\\n - Applications\\n summary: List applications\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: name\\n description: Application name\\n required: false\\n schema: *ref_10\\n - in: query\\n name: query\\n description: Filter applications\\n required: false\\n schema: *ref_10\\n - in: query\\n name: deleted\\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\\n required: false\\n schema: *ref_12\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_12\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_10\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_10\\n post:\\n tags:\\n - Applications\\n summary: Create application\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_24\\n name:\\n type: string\\n description: Application name\\n enabled:\\n type: boolean\\n description: Enabled\\n unify:\\n type: string\\n format: json\\n description: Unify properties\\n config:\\n type: string\\n format: json\\n description: Arbitrary JSON holding application configuration\\n required:\\n - name\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_24\\n '/application/{applicationID}':\\n put:\\n tags:\\n - Applications\\n summary: Update user details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: applicationID\\n description: Application ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_25\\n name:\\n type: string\\n description: Email\\n enabled:\\n type: boolean\\n description: Enabled\\n unify:\\n type: string\\n format: json\\n description: Unify properties\\n config:\\n type: string\\n format: json\\n description: Arbitrary JSON holding application configuration\\n required:\\n - name\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_25\\n get:\\n tags:\\n - Applications\\n summary: Read application details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: applicationID\\n description: Application ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Applications\\n summary: Remove application\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: applicationID\\n description: Application ID\\n required: true\\n schema: *ref_14\\n '/application/{applicationID}/undelete':\\n post:\\n tags:\\n - Applications\\n summary: Undelete application\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: applicationID\\n description: Application ID\\n required: true\\n schema: *ref_14\\n '/application/{applicationID}/trigger':\\n post:\\n tags:\\n - Applications\\n summary: 'Fire system:application trigger'\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: applicationID\\n description: ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_26\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_26\\n /permissions/:\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve defined permissions\\n responses:\\n '200':\\n description: OK\\n /permissions/effective:\\n get:\\n tags:\\n - Permissions\\n summary: Effective rules for current user\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: resource\\n description: Show only rules for a specific resource\\n required: false\\n schema: *ref_10\\n '/permissions/{roleID}/rules':\\n get:\\n tags:\\n - Permissions\\n summary: Retrieve role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Permissions\\n summary: Remove all defined role permissions\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n patch:\\n tags:\\n - Permissions\\n summary: Update permission settings\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: roleID\\n description: Role ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_27\\n rules:\\n type: array\\n items:\\n type: object\\n properties:\\n roleID:\\n type: string\\n format: uuid\\n resource:\\n type: string\\n operation:\\n type: string\\n access:\\n type: string\\n description: List of permission rules to set\\n required:\\n - rules\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_27\\n /reminder/:\\n get:\\n tags:\\n - Reminders\\n summary: List/read reminders\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: reminderID\\n description: Filter by reminder ID\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: resource\\n description: Only reminders of a specific resource\\n required: false\\n schema: *ref_10\\n - in: query\\n name: assignedTo\\n description: Only reminders for a given user\\n required: false\\n schema: *ref_14\\n - in: query\\n name: scheduledFrom\\n description: Only reminders from this time (included)\\n required: false\\n schema: &ref_28\\n type: string\\n format: date-time\\n - in: query\\n name: scheduledUntil\\n description: Only reminders up to this time (included)\\n required: false\\n schema: *ref_28\\n - in: query\\n name: scheduledOnly\\n description: Only scheduled reminders\\n required: false\\n schema: *ref_19\\n - in: query\\n name: excludeDismissed\\n description: Filter out dismissed reminders\\n required: false\\n schema: *ref_19\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_12\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_10\\n - in: query\\n name: sort\\n description: Sort items\\n required: false\\n schema: *ref_10\\n post:\\n tags:\\n - Reminders\\n summary: Add new reminder\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_29\\n resource:\\n type: string\\n description: Resource\\n assignedTo:\\n type: string\\n description: Assigned To\\n payload:\\n type: string\\n format: json\\n description: Payload\\n remindAt:\\n type: string\\n format: date-time\\n description: Remind At\\n required:\\n - resource\\n - assignedTo\\n - payload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_29\\n '/reminder/{reminderID}':\\n put:\\n tags:\\n - Reminders\\n summary: Update reminder\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: reminderID\\n description: Reminder ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_30\\n resource:\\n type: string\\n description: Resource\\n assignedTo:\\n type: string\\n description: Assigned To\\n payload:\\n type: string\\n format: json\\n description: Payload\\n remindAt:\\n type: string\\n format: date-time\\n description: Remind At\\n required:\\n - resource\\n - assignedTo\\n - payload\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_30\\n get:\\n tags:\\n - Reminders\\n summary: Read reminder by ID\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: reminderID\\n description: Reminder ID\\n required: true\\n schema: *ref_14\\n delete:\\n tags:\\n - Reminders\\n summary: Delete reminder\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: reminderID\\n description: Reminder ID\\n required: true\\n schema: *ref_14\\n '/reminder/{reminderID}/dismiss':\\n patch:\\n tags:\\n - Reminders\\n summary: Dismiss reminder\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: reminderID\\n description: reminder ID\\n required: true\\n schema: *ref_14\\n '/reminder/{reminderID}/snooze':\\n patch:\\n tags:\\n - Reminders\\n summary: Snooze reminder\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: reminderID\\n description: reminder ID\\n required: true\\n schema: *ref_14\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_31\\n remindAt:\\n type: string\\n format: date-time\\n description: New Remind At Time\\n required:\\n - remindAt\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_31\\n '/attachment/{kind}/{attachmentID}':\\n get:\\n tags:\\n - Attachments\\n summary: Attachment details\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Kind\\n required: true\\n schema: *ref_10\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_14\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_10\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_14\\n delete:\\n tags:\\n - Attachments\\n summary: Delete attachment\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Kind\\n required: true\\n schema: *ref_10\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_14\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_10\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_14\\n '/attachment/{kind}/{attachmentID}/original/{name}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Kind\\n required: true\\n schema: *ref_10\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: name\\n description: File name\\n required: true\\n schema: *ref_10\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_10\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_14\\n - in: query\\n name: download\\n description: Force file download\\n required: false\\n schema: *ref_19\\n '/attachment/{kind}/{attachmentID}/preview.{ext}':\\n get:\\n tags:\\n - Attachments\\n summary: Serves preview of an attached file\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: kind\\n description: Kind\\n required: true\\n schema: *ref_10\\n - in: path\\n name: attachmentID\\n description: Attachment ID\\n required: true\\n schema: *ref_14\\n - in: path\\n name: ext\\n description: Preview extension/format\\n required: true\\n schema: *ref_10\\n - in: query\\n name: sign\\n description: Signature\\n required: false\\n schema: *ref_10\\n - in: query\\n name: userID\\n description: User ID\\n required: false\\n schema: *ref_14\\n /stats/:\\n get:\\n tags:\\n - Statistics\\n summary: List system statistics\\n responses:\\n '200':\\n description: OK\\n /automation/:\\n get:\\n tags:\\n - System automation scripts\\n summary: List all available automation scripts for system resources\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: resourceTypePrefixes\\n description: Filter by resource prefix\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: resourceTypes\\n description: Filter by resource type\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: eventTypes\\n description: Filter by event type\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: excludeInvalid\\n description: Exclude scripts that can not be used (errors)\\n required: false\\n schema: *ref_19\\n - in: query\\n name: excludeClientScripts\\n description: Do not include client scripts\\n required: false\\n schema: *ref_19\\n - in: query\\n name: excludeServerScripts\\n description: Do not include server scripts\\n required: false\\n schema: *ref_19\\n '/automation/{bundle}-{type}.{ext}':\\n get:\\n tags:\\n - System automation scripts\\n summary: Serves client scripts bundle\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: path\\n name: bundle\\n description: Name of the bundle\\n required: true\\n schema: *ref_10\\n - in: path\\n name: type\\n description: Bundle type\\n required: true\\n schema: *ref_10\\n - in: path\\n name: ext\\n description: Bundle extension\\n required: true\\n schema: *ref_10\\n /automation/trigger:\\n post:\\n tags:\\n - System automation scripts\\n summary: Triggers execution of a specific script on a system service level\\n responses:\\n '200':\\n description: OK\\n requestBody:\\n content:\\n application/json:\\n schema:\\n type: object\\n properties: &ref_32\\n script:\\n type: string\\n description: Script to execute\\n required:\\n - script\\n application/x-www-form-urlencoded:\\n schema:\\n type: object\\n properties: *ref_32\\n /actionlog/:\\n get:\\n tags:\\n - Action log\\n summary: Action log events\\n responses:\\n '200':\\n description: OK\\n parameters:\\n - in: query\\n name: from\\n description: From\\n required: false\\n schema: *ref_28\\n - in: query\\n name: to\\n description: To\\n required: false\\n schema: *ref_28\\n - in: query\\n name: resource\\n description: Resource\\n required: false\\n schema: *ref_10\\n - in: query\\n name: action\\n description: Action\\n required: false\\n schema: *ref_10\\n - in: query\\n name: actorID\\n description: Filter by one or more actors\\n required: false\\n schema:\\n type: array\\n items: *ref_10\\n - in: query\\n name: limit\\n description: Limit\\n required: false\\n schema: *ref_12\\n - in: query\\n name: pageCursor\\n description: Page cursor\\n required: false\\n schema: *ref_10\\nPK\\x07\\x08\\x1c\\xc1\\xc8\\xd4H\\xb1\\x00\\x00H\\xb1\\x00\\x00PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!($jr\\x0dN\\x03\\x00\\x00N\\x03\\x00\\x00\\x0b\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x81\\x00\\x00\\x00\\x00README.adocUT\\x05\\x00\\x01\\x80Cm8PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\xf4\\xc4\\xa2\\x1d\\xdb\\xc9\\x00\\x00\\xdb\\xc9\\x00\\x00\\x0c\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x81\\x90\\x03\\x00\\x00compose.yamlUT\\x05\\x00\\x01\\x80Cm8PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(;\\xaaT,B\\x07\\x00\\x00B\\x07\\x00\\x00\\n\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x81\\xae\\xcd\\x00\\x00index.htmlUT\\x05\\x00\\x01\\x80Cm8PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x83J.D\\x82^\\x00\\x00\\x82^\\x00\\x00\\x0e\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x811\\xd5\\x00\\x00messaging.yamlUT\\x05\\x00\\x01\\x80Cm8PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(6\\xc2Y\\x9d\\xe1\\xfe\\x01\\x00\\xe1\\xfe\\x01\\x00 \\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x81\\xf83\\x01\\x00static.goUT\\x05\\x00\\x01\\x80Cm8PK\\x01\\x02\\x14\\x03\\x14\\x00\\x08\\x00\\x00\\x00\\x00\\x00!(\\x1c\\xc1\\xc8\\xd4H\\xb1\\x00\\x00H\\xb1\\x00\\x00\\x0b\\x00 \\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xa4\\x81\\x193\\x03\\x00system.yamlUT\\x05\\x00\\x01\\x80Cm8PK\\x05\\x06\\x00\\x00\\x00\\x00\\x06\\x00\\x06\\x00\\x8d\\x01\\x00\\x00\\xa3\\xe4\\x03\\x00\\x00\\x00\"\nPK\x07\x08\xbf\n\x80\xfc\xb3\x13\x04\x00\xb3\x13\x04\x00PK\x03\x04\x14\x00\x08\x00\x00\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00 \x00system.yamlUT\x05\x00\x01\x80Cm8openapi: 3.0.0\ninfo:\n title: Corteza System API\n description: Corteza System REST API definition\n version: 2020.12\n contact:\n email: info@cortezaproject.org\n license:\n name: Apache 2.0\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html'\npaths:\n /auth/:\n get:\n tags:\n - Authentication\n summary: Returns auth settings\n responses:\n '200':\n description: OK\n /auth/check:\n get:\n tags:\n - Authentication\n summary: Check JWT token\n responses:\n '200':\n description: OK\n /auth/impersonate:\n post:\n tags:\n - Authentication\n summary: Impersonate a user\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_0\n userID:\n type: string\n description: ID of the impersonated user\n required:\n - userID\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_0\n /auth/exchange:\n post:\n tags:\n - Authentication\n summary: Exchange auth token for JWT\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_1\n token:\n type: string\n description: Token to be exchanged for JWT\n required:\n - token\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_1\n /auth/logout:\n get:\n tags:\n - Authentication\n summary: Logout\n responses:\n '200':\n description: OK\n /auth/internal/login:\n post:\n tags:\n - Internal authentication\n summary: Login user\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_2\n email:\n type: string\n description: Email\n password:\n type: string\n format: password\n description: Password\n required:\n - email\n - password\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_2\n /auth/internal/signup:\n post:\n tags:\n - Internal authentication\n summary: User signup/registration\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_3\n email:\n type: string\n description: Email\n username:\n type: string\n description: Username\n password:\n type: string\n format: password\n description: Password\n handle:\n type: string\n description: User handle\n name:\n type: string\n description: Display name\n required:\n - email\n - password\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_3\n /auth/internal/request-password-reset:\n post:\n tags:\n - Internal authentication\n summary: Request password reset token (via email)\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_4\n email:\n type: string\n description: Email\n required:\n - email\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_4\n /auth/internal/exchange-password-reset-token:\n post:\n tags:\n - Internal authentication\n summary: Exchange password reset token for new token and user info\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_5\n token:\n type: string\n description: Token\n required:\n - token\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_5\n /auth/internal/reset-password:\n post:\n tags:\n - Internal authentication\n summary: Reset password with exchanged password reset token\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_6\n token:\n type: string\n description: Token\n password:\n type: string\n format: password\n description: Password\n required:\n - token\n - password\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_6\n /auth/internal/confirm-email:\n post:\n tags:\n - Internal authentication\n summary: Confirm email with token\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_7\n token:\n type: string\n description: Token\n required:\n - token\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_7\n /auth/internal/change-password:\n post:\n tags:\n - Internal authentication\n summary: 'Changes password for current user, requires current password'\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_8\n oldPassword:\n type: string\n description: Old password\n newPassword:\n type: string\n description: New password\n required:\n - oldPassword\n - newPassword\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_8\n /settings/:\n get:\n tags:\n - Settings\n summary: List settings\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: prefix\n description: Key prefix\n required: false\n schema: &ref_10\n type: string\n patch:\n tags:\n - Settings\n summary: Update settings\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_9\n values:\n type: array\n items:\n type: object\n properties:\n name:\n type: string\n value:\n type: string\n description: >-\n Array of new settings: `[{ name: ..., value: ... }]`. Omit\n value to remove setting\n required:\n - values\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_9\n '/settings/{key}':\n get:\n tags:\n - Settings\n summary: Get a value for a key\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: key\n description: Setting key\n required: true\n schema: *ref_10\n - in: query\n name: ownerID\n description: Owner ID\n required: false\n schema: &ref_14\n type: string\n post:\n tags:\n - Settings\n summary: Set value for specific setting\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: key\n description: Key\n required: true\n schema: *ref_10\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_11\n upload:\n type: string\n format: binary\n description: File to upload\n ownerID:\n type: string\n description: Owner ID\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_11\n /settings/current:\n get:\n tags:\n - Settings\n summary: Current compose settings\n responses:\n '200':\n description: OK\n /subscription/:\n get:\n tags:\n - Subscription\n summary: Returns current subscription status\n responses:\n '200':\n description: OK\n /roles/:\n get:\n tags:\n - Roles\n summary: List roles\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: query\n description: Search query\n required: false\n schema: *ref_10\n - in: query\n name: deleted\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\n required: false\n schema: &ref_12\n type: string\n - in: query\n name: archived\n description: 'Exclude (0, default), include (1) or return only (2) achived roles'\n required: false\n schema: *ref_12\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_12\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_10\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_10\n post:\n tags:\n - Roles\n summary: Update role details\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_13\n name:\n type: string\n description: Name of Role\n handle:\n type: string\n description: Handle for Role\n members:\n type: array\n items: *ref_10\n description: Role member IDs\n required:\n - name\n - handle\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_13\n '/roles/{roleID}':\n put:\n tags:\n - Roles\n summary: Update role details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_15\n name:\n type: string\n description: Name of Role\n handle:\n type: string\n description: Handle for Role\n members:\n type: array\n items: *ref_10\n description: Role member IDs\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_15\n get:\n tags:\n - Roles\n summary: Read role details and memberships\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Roles\n summary: Remove role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/archive':\n post:\n tags:\n - Roles\n summary: Archive role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/unarchive':\n post:\n tags:\n - Roles\n summary: Unarchive role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/undelete':\n post:\n tags:\n - Roles\n summary: Undelete role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/move':\n post:\n tags:\n - Roles\n summary: Move role to different organisation\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_16\n organisationID:\n type: string\n description: Role ID\n required:\n - organisationID\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_16\n '/roles/{roleID}/merge':\n post:\n tags:\n - Roles\n summary: Merge one role into another\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Source Role ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_17\n destination:\n type: string\n description: Destination Role ID\n required:\n - destination\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_17\n '/roles/{roleID}/members':\n get:\n tags:\n - Roles\n summary: Returns all role members\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Source Role ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/member/{userID}':\n post:\n tags:\n - Roles\n summary: Add member to a role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Source Role ID\n required: true\n schema: *ref_14\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Roles\n summary: Remove member from a role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Source Role ID\n required: true\n schema: *ref_14\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/roles/{roleID}/trigger':\n post:\n tags:\n - Roles\n summary: 'Fire system:role trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_18\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_18\n /users/:\n get:\n tags:\n - Users\n summary: Search users (Directory)\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: userID\n description: Filter by user ID\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: roleID\n description: Filter by role membership\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: query\n description: Search query to match against users\n required: false\n schema: *ref_10\n - in: query\n name: username\n description: Search username to match against users\n required: false\n schema: *ref_10\n - in: query\n name: email\n description: Search email to match against users\n required: false\n schema: *ref_10\n - in: query\n name: handle\n description: Search handle to match against users\n required: false\n schema: *ref_10\n - in: query\n name: kind\n description: 'Kind (normal, bot)'\n required: false\n schema:\n type: string\n - in: query\n name: incDeleted\n description: '[Deprecated] Include deleted users (requires ''access'' permission)'\n required: false\n schema: &ref_19\n type: boolean\n - in: query\n name: incSuspended\n description: '[Deprecated] Include suspended users'\n required: false\n schema: *ref_19\n - in: query\n name: deleted\n description: 'Exclude (0, default), include (1) or return only (2) deleted users'\n required: false\n schema: *ref_12\n - in: query\n name: suspended\n description: 'Exclude (0, default), include (1) or return only (2) suspended users'\n required: false\n schema: *ref_12\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_12\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_10\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_10\n post:\n tags:\n - Users\n summary: Create user\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_20\n email:\n type: string\n description: Email\n name:\n type: string\n description: Name\n handle:\n type: string\n description: Handle\n kind:\n type: string\n description: 'Kind (normal, bot)'\n required:\n - email\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_20\n '/users/{userID}':\n put:\n tags:\n - Users\n summary: Update user details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_21\n email:\n type: string\n description: Email\n name:\n type: string\n description: Name\n handle:\n type: string\n description: Handle\n kind:\n type: string\n description: 'Kind (normal, bot)'\n required:\n - email\n - name\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_21\n get:\n tags:\n - Users\n summary: Read user details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Users\n summary: Remove user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/suspend':\n post:\n tags:\n - Users\n summary: Suspend user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/unsuspend':\n post:\n tags:\n - Users\n summary: Unsuspend user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/undelete':\n post:\n tags:\n - Users\n summary: Undelete user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/password':\n post:\n tags:\n - Users\n summary: Set's or changes user's password\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_22\n password:\n type: string\n format: password\n description: New password\n required:\n - password\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_22\n '/users/{userID}/membership':\n get:\n tags:\n - Users\n summary: Add member to a role\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/membership/{roleID}':\n post:\n tags:\n - Users\n summary: Add role to a user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Users\n summary: Remove role from a user\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n - in: path\n name: userID\n description: User ID\n required: true\n schema: *ref_14\n '/users/{userID}/trigger':\n post:\n tags:\n - Users\n summary: 'Fire system:user trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: userID\n description: ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_23\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_23\n /application/:\n get:\n tags:\n - Applications\n summary: List applications\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: name\n description: Application name\n required: false\n schema: *ref_10\n - in: query\n name: query\n description: Filter applications\n required: false\n schema: *ref_10\n - in: query\n name: deleted\n description: 'Exclude (0, default), include (1) or return only (2) deleted roles'\n required: false\n schema: *ref_12\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_12\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_10\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_10\n post:\n tags:\n - Applications\n summary: Create application\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_24\n name:\n type: string\n description: Application name\n enabled:\n type: boolean\n description: Enabled\n unify:\n type: string\n format: json\n description: Unify properties\n config:\n type: string\n format: json\n description: Arbitrary JSON holding application configuration\n required:\n - name\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_24\n '/application/{applicationID}':\n put:\n tags:\n - Applications\n summary: Update user details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: applicationID\n description: Application ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_25\n name:\n type: string\n description: Email\n enabled:\n type: boolean\n description: Enabled\n unify:\n type: string\n format: json\n description: Unify properties\n config:\n type: string\n format: json\n description: Arbitrary JSON holding application configuration\n required:\n - name\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_25\n get:\n tags:\n - Applications\n summary: Read application details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: applicationID\n description: Application ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Applications\n summary: Remove application\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: applicationID\n description: Application ID\n required: true\n schema: *ref_14\n '/application/{applicationID}/undelete':\n post:\n tags:\n - Applications\n summary: Undelete application\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: applicationID\n description: Application ID\n required: true\n schema: *ref_14\n '/application/{applicationID}/trigger':\n post:\n tags:\n - Applications\n summary: 'Fire system:application trigger'\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: applicationID\n description: ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_26\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_26\n /permissions/:\n get:\n tags:\n - Permissions\n summary: Retrieve defined permissions\n responses:\n '200':\n description: OK\n /permissions/effective:\n get:\n tags:\n - Permissions\n summary: Effective rules for current user\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: resource\n description: Show only rules for a specific resource\n required: false\n schema: *ref_10\n '/permissions/{roleID}/rules':\n get:\n tags:\n - Permissions\n summary: Retrieve role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Permissions\n summary: Remove all defined role permissions\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n patch:\n tags:\n - Permissions\n summary: Update permission settings\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: roleID\n description: Role ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_27\n rules:\n type: array\n items:\n type: object\n properties:\n roleID:\n type: string\n format: uuid\n resource:\n type: string\n operation:\n type: string\n access:\n type: string\n description: List of permission rules to set\n required:\n - rules\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_27\n /reminder/:\n get:\n tags:\n - Reminders\n summary: List/read reminders\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: reminderID\n description: Filter by reminder ID\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: resource\n description: Only reminders of a specific resource\n required: false\n schema: *ref_10\n - in: query\n name: assignedTo\n description: Only reminders for a given user\n required: false\n schema: *ref_14\n - in: query\n name: scheduledFrom\n description: Only reminders from this time (included)\n required: false\n schema: &ref_28\n type: string\n format: date-time\n - in: query\n name: scheduledUntil\n description: Only reminders up to this time (included)\n required: false\n schema: *ref_28\n - in: query\n name: scheduledOnly\n description: Only scheduled reminders\n required: false\n schema: *ref_19\n - in: query\n name: excludeDismissed\n description: Filter out dismissed reminders\n required: false\n schema: *ref_19\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_12\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_10\n - in: query\n name: sort\n description: Sort items\n required: false\n schema: *ref_10\n post:\n tags:\n - Reminders\n summary: Add new reminder\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_29\n resource:\n type: string\n description: Resource\n assignedTo:\n type: string\n description: Assigned To\n payload:\n type: string\n format: json\n description: Payload\n remindAt:\n type: string\n format: date-time\n description: Remind At\n required:\n - resource\n - assignedTo\n - payload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_29\n '/reminder/{reminderID}':\n put:\n tags:\n - Reminders\n summary: Update reminder\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: reminderID\n description: Reminder ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_30\n resource:\n type: string\n description: Resource\n assignedTo:\n type: string\n description: Assigned To\n payload:\n type: string\n format: json\n description: Payload\n remindAt:\n type: string\n format: date-time\n description: Remind At\n required:\n - resource\n - assignedTo\n - payload\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_30\n get:\n tags:\n - Reminders\n summary: Read reminder by ID\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: reminderID\n description: Reminder ID\n required: true\n schema: *ref_14\n delete:\n tags:\n - Reminders\n summary: Delete reminder\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: reminderID\n description: Reminder ID\n required: true\n schema: *ref_14\n '/reminder/{reminderID}/dismiss':\n patch:\n tags:\n - Reminders\n summary: Dismiss reminder\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: reminderID\n description: reminder ID\n required: true\n schema: *ref_14\n '/reminder/{reminderID}/snooze':\n patch:\n tags:\n - Reminders\n summary: Snooze reminder\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: reminderID\n description: reminder ID\n required: true\n schema: *ref_14\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_31\n remindAt:\n type: string\n format: date-time\n description: New Remind At Time\n required:\n - remindAt\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_31\n '/attachment/{kind}/{attachmentID}':\n get:\n tags:\n - Attachments\n summary: Attachment details\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Kind\n required: true\n schema: *ref_10\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_14\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_10\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_14\n delete:\n tags:\n - Attachments\n summary: Delete attachment\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Kind\n required: true\n schema: *ref_10\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_14\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_10\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_14\n '/attachment/{kind}/{attachmentID}/original/{name}':\n get:\n tags:\n - Attachments\n summary: Serves attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Kind\n required: true\n schema: *ref_10\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_14\n - in: path\n name: name\n description: File name\n required: true\n schema: *ref_10\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_10\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_14\n - in: query\n name: download\n description: Force file download\n required: false\n schema: *ref_19\n '/attachment/{kind}/{attachmentID}/preview.{ext}':\n get:\n tags:\n - Attachments\n summary: Serves preview of an attached file\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: kind\n description: Kind\n required: true\n schema: *ref_10\n - in: path\n name: attachmentID\n description: Attachment ID\n required: true\n schema: *ref_14\n - in: path\n name: ext\n description: Preview extension/format\n required: true\n schema: *ref_10\n - in: query\n name: sign\n description: Signature\n required: false\n schema: *ref_10\n - in: query\n name: userID\n description: User ID\n required: false\n schema: *ref_14\n /stats/:\n get:\n tags:\n - Statistics\n summary: List system statistics\n responses:\n '200':\n description: OK\n /automation/:\n get:\n tags:\n - System automation scripts\n summary: List all available automation scripts for system resources\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: resourceTypePrefixes\n description: Filter by resource prefix\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: resourceTypes\n description: Filter by resource type\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: eventTypes\n description: Filter by event type\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: excludeInvalid\n description: Exclude scripts that can not be used (errors)\n required: false\n schema: *ref_19\n - in: query\n name: excludeClientScripts\n description: Do not include client scripts\n required: false\n schema: *ref_19\n - in: query\n name: excludeServerScripts\n description: Do not include server scripts\n required: false\n schema: *ref_19\n '/automation/{bundle}-{type}.{ext}':\n get:\n tags:\n - System automation scripts\n summary: Serves client scripts bundle\n responses:\n '200':\n description: OK\n parameters:\n - in: path\n name: bundle\n description: Name of the bundle\n required: true\n schema: *ref_10\n - in: path\n name: type\n description: Bundle type\n required: true\n schema: *ref_10\n - in: path\n name: ext\n description: Bundle extension\n required: true\n schema: *ref_10\n /automation/trigger:\n post:\n tags:\n - System automation scripts\n summary: Triggers execution of a specific script on a system service level\n responses:\n '200':\n description: OK\n requestBody:\n content:\n application/json:\n schema:\n type: object\n properties: &ref_32\n script:\n type: string\n description: Script to execute\n required:\n - script\n application/x-www-form-urlencoded:\n schema:\n type: object\n properties: *ref_32\n /actionlog/:\n get:\n tags:\n - Action log\n summary: Action log events\n responses:\n '200':\n description: OK\n parameters:\n - in: query\n name: from\n description: From\n required: false\n schema: *ref_28\n - in: query\n name: to\n description: To\n required: false\n schema: *ref_28\n - in: query\n name: resource\n description: Resource\n required: false\n schema: *ref_10\n - in: query\n name: action\n description: Action\n required: false\n schema: *ref_10\n - in: query\n name: actorID\n description: Filter by one or more actors\n required: false\n schema:\n type: array\n items: *ref_10\n - in: query\n name: limit\n description: Limit\n required: false\n schema: *ref_12\n - in: query\n name: pageCursor\n description: Page cursor\n required: false\n schema: *ref_10\nPK\x07\x08\xdd\xafQ=I\xb1\x00\x00I\xb1\x00\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!($jr\x0dN\x03\x00\x00N\x03\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00README.adocUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(M<\xdf\xf8\xdc\xc9\x00\x00\xdc\xc9\x00\x00\x0c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x90\x03\x00\x00compose.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(;\xaaT,B\x07\x00\x00B\x07\x00\x00\n\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xaf\xcd\x00\x00index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\x05\xac\xad\xf6\x83^\x00\x00\x83^\x00\x00\x0e\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x812\xd5\x00\x00messaging.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xbf\n\x80\xfc\xb3\x13\x04\x00\xb3\x13\x04\x00 \x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x81\xfa3\x01\x00static.goUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x00\x00\x00\x00!(\xdd\xafQ=I\xb1\x00\x00I\xb1\x00\x00\x0b\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xedG\x05\x00system.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\x06\x00\x06\x00\x8d\x01\x00\x00x\xf9\x05\x00\x00\x00" diff --git a/docs/system.yaml b/docs/system.yaml new file mode 100644 index 000000000..b7c6dafdf --- /dev/null +++ b/docs/system.yaml @@ -0,0 +1,1781 @@ +openapi: 3.0.0 +info: + title: Corteza System API + description: Corteza System REST API definition + version: 2020.12 + contact: + email: info@cortezaproject.org + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +paths: + /auth/: + get: + tags: + - Authentication + summary: Returns auth settings + responses: + '200': + description: OK + /auth/check: + get: + tags: + - Authentication + summary: Check JWT token + responses: + '200': + description: OK + /auth/impersonate: + post: + tags: + - Authentication + summary: Impersonate a user + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_0 + userID: + type: string + description: ID of the impersonated user + required: + - userID + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_0 + /auth/exchange: + post: + tags: + - Authentication + summary: Exchange auth token for JWT + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_1 + token: + type: string + description: Token to be exchanged for JWT + required: + - token + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_1 + /auth/logout: + get: + tags: + - Authentication + summary: Logout + responses: + '200': + description: OK + /auth/internal/login: + post: + tags: + - Internal authentication + summary: Login user + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_2 + email: + type: string + description: Email + password: + type: string + format: password + description: Password + required: + - email + - password + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_2 + /auth/internal/signup: + post: + tags: + - Internal authentication + summary: User signup/registration + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_3 + email: + type: string + description: Email + username: + type: string + description: Username + password: + type: string + format: password + description: Password + handle: + type: string + description: User handle + name: + type: string + description: Display name + required: + - email + - password + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_3 + /auth/internal/request-password-reset: + post: + tags: + - Internal authentication + summary: Request password reset token (via email) + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_4 + email: + type: string + description: Email + required: + - email + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_4 + /auth/internal/exchange-password-reset-token: + post: + tags: + - Internal authentication + summary: Exchange password reset token for new token and user info + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_5 + token: + type: string + description: Token + required: + - token + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_5 + /auth/internal/reset-password: + post: + tags: + - Internal authentication + summary: Reset password with exchanged password reset token + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_6 + token: + type: string + description: Token + password: + type: string + format: password + description: Password + required: + - token + - password + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_6 + /auth/internal/confirm-email: + post: + tags: + - Internal authentication + summary: Confirm email with token + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_7 + token: + type: string + description: Token + required: + - token + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_7 + /auth/internal/change-password: + post: + tags: + - Internal authentication + summary: 'Changes password for current user, requires current password' + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_8 + oldPassword: + type: string + description: Old password + newPassword: + type: string + description: New password + required: + - oldPassword + - newPassword + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_8 + /settings/: + get: + tags: + - Settings + summary: List settings + responses: + '200': + description: OK + parameters: + - in: query + name: prefix + description: Key prefix + required: false + schema: &ref_10 + type: string + patch: + tags: + - Settings + summary: Update settings + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_9 + values: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + description: >- + Array of new settings: `[{ name: ..., value: ... }]`. Omit + value to remove setting + required: + - values + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_9 + '/settings/{key}': + get: + tags: + - Settings + summary: Get a value for a key + responses: + '200': + description: OK + parameters: + - in: path + name: key + description: Setting key + required: true + schema: *ref_10 + - in: query + name: ownerID + description: Owner ID + required: false + schema: &ref_14 + type: string + post: + tags: + - Settings + summary: Set value for specific setting + responses: + '200': + description: OK + parameters: + - in: path + name: key + description: Key + required: true + schema: *ref_10 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_11 + upload: + type: string + format: binary + description: File to upload + ownerID: + type: string + description: Owner ID + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_11 + /settings/current: + get: + tags: + - Settings + summary: Current compose settings + responses: + '200': + description: OK + /subscription/: + get: + tags: + - Subscription + summary: Returns current subscription status + responses: + '200': + description: OK + /roles/: + get: + tags: + - Roles + summary: List roles + responses: + '200': + description: OK + parameters: + - in: query + name: query + description: Search query + required: false + schema: *ref_10 + - in: query + name: deleted + description: 'Exclude (0, default), include (1) or return only (2) deleted roles' + required: false + schema: &ref_12 + type: string + - in: query + name: archived + description: 'Exclude (0, default), include (1) or return only (2) achived roles' + required: false + schema: *ref_12 + - in: query + name: limit + description: Limit + required: false + schema: *ref_12 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_10 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_10 + post: + tags: + - Roles + summary: Update role details + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_13 + name: + type: string + description: Name of Role + handle: + type: string + description: Handle for Role + members: + type: array + items: *ref_10 + description: Role member IDs + required: + - name + - handle + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_13 + '/roles/{roleID}': + put: + tags: + - Roles + summary: Update role details + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_15 + name: + type: string + description: Name of Role + handle: + type: string + description: Handle for Role + members: + type: array + items: *ref_10 + description: Role member IDs + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_15 + get: + tags: + - Roles + summary: Read role details and memberships + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + delete: + tags: + - Roles + summary: Remove role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + '/roles/{roleID}/archive': + post: + tags: + - Roles + summary: Archive role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + '/roles/{roleID}/unarchive': + post: + tags: + - Roles + summary: Unarchive role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + '/roles/{roleID}/undelete': + post: + tags: + - Roles + summary: Undelete role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + '/roles/{roleID}/move': + post: + tags: + - Roles + summary: Move role to different organisation + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_16 + organisationID: + type: string + description: Role ID + required: + - organisationID + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_16 + '/roles/{roleID}/merge': + post: + tags: + - Roles + summary: Merge one role into another + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Source Role ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_17 + destination: + type: string + description: Destination Role ID + required: + - destination + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_17 + '/roles/{roleID}/members': + get: + tags: + - Roles + summary: Returns all role members + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Source Role ID + required: true + schema: *ref_14 + '/roles/{roleID}/member/{userID}': + post: + tags: + - Roles + summary: Add member to a role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Source Role ID + required: true + schema: *ref_14 + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + delete: + tags: + - Roles + summary: Remove member from a role + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Source Role ID + required: true + schema: *ref_14 + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/roles/{roleID}/trigger': + post: + tags: + - Roles + summary: 'Fire system:role trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_18 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_18 + /users/: + get: + tags: + - Users + summary: Search users (Directory) + responses: + '200': + description: OK + parameters: + - in: query + name: userID + description: Filter by user ID + required: false + schema: + type: array + items: *ref_10 + - in: query + name: roleID + description: Filter by role membership + required: false + schema: + type: array + items: *ref_10 + - in: query + name: query + description: Search query to match against users + required: false + schema: *ref_10 + - in: query + name: username + description: Search username to match against users + required: false + schema: *ref_10 + - in: query + name: email + description: Search email to match against users + required: false + schema: *ref_10 + - in: query + name: handle + description: Search handle to match against users + required: false + schema: *ref_10 + - in: query + name: kind + description: 'Kind (normal, bot)' + required: false + schema: + type: string + - in: query + name: incDeleted + description: '[Deprecated] Include deleted users (requires ''access'' permission)' + required: false + schema: &ref_19 + type: boolean + - in: query + name: incSuspended + description: '[Deprecated] Include suspended users' + required: false + schema: *ref_19 + - in: query + name: deleted + description: 'Exclude (0, default), include (1) or return only (2) deleted users' + required: false + schema: *ref_12 + - in: query + name: suspended + description: 'Exclude (0, default), include (1) or return only (2) suspended users' + required: false + schema: *ref_12 + - in: query + name: limit + description: Limit + required: false + schema: *ref_12 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_10 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_10 + post: + tags: + - Users + summary: Create user + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_20 + email: + type: string + description: Email + name: + type: string + description: Name + handle: + type: string + description: Handle + kind: + type: string + description: 'Kind (normal, bot)' + required: + - email + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_20 + '/users/{userID}': + put: + tags: + - Users + summary: Update user details + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_21 + email: + type: string + description: Email + name: + type: string + description: Name + handle: + type: string + description: Handle + kind: + type: string + description: 'Kind (normal, bot)' + required: + - email + - name + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_21 + get: + tags: + - Users + summary: Read user details + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + delete: + tags: + - Users + summary: Remove user + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/suspend': + post: + tags: + - Users + summary: Suspend user + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/unsuspend': + post: + tags: + - Users + summary: Unsuspend user + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/undelete': + post: + tags: + - Users + summary: Undelete user + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/password': + post: + tags: + - Users + summary: Set's or changes user's password + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_22 + password: + type: string + format: password + description: New password + required: + - password + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_22 + '/users/{userID}/membership': + get: + tags: + - Users + summary: Add member to a role + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/membership/{roleID}': + post: + tags: + - Users + summary: Add role to a user + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + delete: + tags: + - Users + summary: Remove role from a user + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + - in: path + name: userID + description: User ID + required: true + schema: *ref_14 + '/users/{userID}/trigger': + post: + tags: + - Users + summary: 'Fire system:user trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: userID + description: ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_23 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_23 + /application/: + get: + tags: + - Applications + summary: List applications + responses: + '200': + description: OK + parameters: + - in: query + name: name + description: Application name + required: false + schema: *ref_10 + - in: query + name: query + description: Filter applications + required: false + schema: *ref_10 + - in: query + name: deleted + description: 'Exclude (0, default), include (1) or return only (2) deleted roles' + required: false + schema: *ref_12 + - in: query + name: limit + description: Limit + required: false + schema: *ref_12 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_10 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_10 + post: + tags: + - Applications + summary: Create application + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_24 + name: + type: string + description: Application name + enabled: + type: boolean + description: Enabled + unify: + type: string + format: json + description: Unify properties + config: + type: string + format: json + description: Arbitrary JSON holding application configuration + required: + - name + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_24 + '/application/{applicationID}': + put: + tags: + - Applications + summary: Update user details + responses: + '200': + description: OK + parameters: + - in: path + name: applicationID + description: Application ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_25 + name: + type: string + description: Email + enabled: + type: boolean + description: Enabled + unify: + type: string + format: json + description: Unify properties + config: + type: string + format: json + description: Arbitrary JSON holding application configuration + required: + - name + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_25 + get: + tags: + - Applications + summary: Read application details + responses: + '200': + description: OK + parameters: + - in: path + name: applicationID + description: Application ID + required: true + schema: *ref_14 + delete: + tags: + - Applications + summary: Remove application + responses: + '200': + description: OK + parameters: + - in: path + name: applicationID + description: Application ID + required: true + schema: *ref_14 + '/application/{applicationID}/undelete': + post: + tags: + - Applications + summary: Undelete application + responses: + '200': + description: OK + parameters: + - in: path + name: applicationID + description: Application ID + required: true + schema: *ref_14 + '/application/{applicationID}/trigger': + post: + tags: + - Applications + summary: 'Fire system:application trigger' + responses: + '200': + description: OK + parameters: + - in: path + name: applicationID + description: ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_26 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_26 + /permissions/: + get: + tags: + - Permissions + summary: Retrieve defined permissions + responses: + '200': + description: OK + /permissions/effective: + get: + tags: + - Permissions + summary: Effective rules for current user + responses: + '200': + description: OK + parameters: + - in: query + name: resource + description: Show only rules for a specific resource + required: false + schema: *ref_10 + '/permissions/{roleID}/rules': + get: + tags: + - Permissions + summary: Retrieve role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + delete: + tags: + - Permissions + summary: Remove all defined role permissions + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + patch: + tags: + - Permissions + summary: Update permission settings + responses: + '200': + description: OK + parameters: + - in: path + name: roleID + description: Role ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_27 + rules: + type: array + items: + type: object + properties: + roleID: + type: string + format: uuid + resource: + type: string + operation: + type: string + access: + type: string + description: List of permission rules to set + required: + - rules + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_27 + /reminder/: + get: + tags: + - Reminders + summary: List/read reminders + responses: + '200': + description: OK + parameters: + - in: query + name: reminderID + description: Filter by reminder ID + required: false + schema: + type: array + items: *ref_10 + - in: query + name: resource + description: Only reminders of a specific resource + required: false + schema: *ref_10 + - in: query + name: assignedTo + description: Only reminders for a given user + required: false + schema: *ref_14 + - in: query + name: scheduledFrom + description: Only reminders from this time (included) + required: false + schema: &ref_28 + type: string + format: date-time + - in: query + name: scheduledUntil + description: Only reminders up to this time (included) + required: false + schema: *ref_28 + - in: query + name: scheduledOnly + description: Only scheduled reminders + required: false + schema: *ref_19 + - in: query + name: excludeDismissed + description: Filter out dismissed reminders + required: false + schema: *ref_19 + - in: query + name: limit + description: Limit + required: false + schema: *ref_12 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_10 + - in: query + name: sort + description: Sort items + required: false + schema: *ref_10 + post: + tags: + - Reminders + summary: Add new reminder + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_29 + resource: + type: string + description: Resource + assignedTo: + type: string + description: Assigned To + payload: + type: string + format: json + description: Payload + remindAt: + type: string + format: date-time + description: Remind At + required: + - resource + - assignedTo + - payload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_29 + '/reminder/{reminderID}': + put: + tags: + - Reminders + summary: Update reminder + responses: + '200': + description: OK + parameters: + - in: path + name: reminderID + description: Reminder ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_30 + resource: + type: string + description: Resource + assignedTo: + type: string + description: Assigned To + payload: + type: string + format: json + description: Payload + remindAt: + type: string + format: date-time + description: Remind At + required: + - resource + - assignedTo + - payload + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_30 + get: + tags: + - Reminders + summary: Read reminder by ID + responses: + '200': + description: OK + parameters: + - in: path + name: reminderID + description: Reminder ID + required: true + schema: *ref_14 + delete: + tags: + - Reminders + summary: Delete reminder + responses: + '200': + description: OK + parameters: + - in: path + name: reminderID + description: Reminder ID + required: true + schema: *ref_14 + '/reminder/{reminderID}/dismiss': + patch: + tags: + - Reminders + summary: Dismiss reminder + responses: + '200': + description: OK + parameters: + - in: path + name: reminderID + description: reminder ID + required: true + schema: *ref_14 + '/reminder/{reminderID}/snooze': + patch: + tags: + - Reminders + summary: Snooze reminder + responses: + '200': + description: OK + parameters: + - in: path + name: reminderID + description: reminder ID + required: true + schema: *ref_14 + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_31 + remindAt: + type: string + format: date-time + description: New Remind At Time + required: + - remindAt + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_31 + '/attachment/{kind}/{attachmentID}': + get: + tags: + - Attachments + summary: Attachment details + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Kind + required: true + schema: *ref_10 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_14 + - in: query + name: sign + description: Signature + required: false + schema: *ref_10 + - in: query + name: userID + description: User ID + required: false + schema: *ref_14 + delete: + tags: + - Attachments + summary: Delete attachment + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Kind + required: true + schema: *ref_10 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_14 + - in: query + name: sign + description: Signature + required: false + schema: *ref_10 + - in: query + name: userID + description: User ID + required: false + schema: *ref_14 + '/attachment/{kind}/{attachmentID}/original/{name}': + get: + tags: + - Attachments + summary: Serves attached file + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Kind + required: true + schema: *ref_10 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_14 + - in: path + name: name + description: File name + required: true + schema: *ref_10 + - in: query + name: sign + description: Signature + required: false + schema: *ref_10 + - in: query + name: userID + description: User ID + required: false + schema: *ref_14 + - in: query + name: download + description: Force file download + required: false + schema: *ref_19 + '/attachment/{kind}/{attachmentID}/preview.{ext}': + get: + tags: + - Attachments + summary: Serves preview of an attached file + responses: + '200': + description: OK + parameters: + - in: path + name: kind + description: Kind + required: true + schema: *ref_10 + - in: path + name: attachmentID + description: Attachment ID + required: true + schema: *ref_14 + - in: path + name: ext + description: Preview extension/format + required: true + schema: *ref_10 + - in: query + name: sign + description: Signature + required: false + schema: *ref_10 + - in: query + name: userID + description: User ID + required: false + schema: *ref_14 + /stats/: + get: + tags: + - Statistics + summary: List system statistics + responses: + '200': + description: OK + /automation/: + get: + tags: + - System automation scripts + summary: List all available automation scripts for system resources + responses: + '200': + description: OK + parameters: + - in: query + name: resourceTypePrefixes + description: Filter by resource prefix + required: false + schema: + type: array + items: *ref_10 + - in: query + name: resourceTypes + description: Filter by resource type + required: false + schema: + type: array + items: *ref_10 + - in: query + name: eventTypes + description: Filter by event type + required: false + schema: + type: array + items: *ref_10 + - in: query + name: excludeInvalid + description: Exclude scripts that can not be used (errors) + required: false + schema: *ref_19 + - in: query + name: excludeClientScripts + description: Do not include client scripts + required: false + schema: *ref_19 + - in: query + name: excludeServerScripts + description: Do not include server scripts + required: false + schema: *ref_19 + '/automation/{bundle}-{type}.{ext}': + get: + tags: + - System automation scripts + summary: Serves client scripts bundle + responses: + '200': + description: OK + parameters: + - in: path + name: bundle + description: Name of the bundle + required: true + schema: *ref_10 + - in: path + name: type + description: Bundle type + required: true + schema: *ref_10 + - in: path + name: ext + description: Bundle extension + required: true + schema: *ref_10 + /automation/trigger: + post: + tags: + - System automation scripts + summary: Triggers execution of a specific script on a system service level + responses: + '200': + description: OK + requestBody: + content: + application/json: + schema: + type: object + properties: &ref_32 + script: + type: string + description: Script to execute + required: + - script + application/x-www-form-urlencoded: + schema: + type: object + properties: *ref_32 + /actionlog/: + get: + tags: + - Action log + summary: Action log events + responses: + '200': + description: OK + parameters: + - in: query + name: from + description: From + required: false + schema: *ref_28 + - in: query + name: to + description: To + required: false + schema: *ref_28 + - in: query + name: resource + description: Resource + required: false + schema: *ref_10 + - in: query + name: action + description: Action + required: false + schema: *ref_10 + - in: query + name: actorID + description: Filter by one or more actors + required: false + schema: + type: array + items: *ref_10 + - in: query + name: limit + description: Limit + required: false + schema: *ref_12 + - in: query + name: pageCursor + description: Page cursor + required: false + schema: *ref_10 diff --git a/docs/system/README.md b/docs/system/README.md deleted file mode 100644 index e52cdf5f5..000000000 --- a/docs/system/README.md +++ /dev/null @@ -1,1448 +0,0 @@ -# Action log - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/actionlog/` | Action log events | - -## Action log events - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/actionlog/` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| from | *time.Time | GET | From | N/A | NO | -| to | *time.Time | GET | To | N/A | NO | -| resource | string | GET | Resource | N/A | NO | -| action | string | GET | Action | N/A | NO | -| actorID | []string | GET | Filter by one or more actors | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | - ---- - - - - -# Applications - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/application/` | List applications | -| `POST` | `/application/` | Create application | -| `PUT` | `/application/{applicationID}` | Update user details | -| `GET` | `/application/{applicationID}` | Read application details | -| `DELETE` | `/application/{applicationID}` | Remove application | -| `POST` | `/application/{applicationID}/undelete` | Undelete application | -| `POST` | `/application/{applicationID}/trigger` | Fire system:application trigger | - -## List applications - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | GET | Application name | N/A | NO | -| query | string | GET | Filter applications | N/A | NO | -| deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted roles | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | - -## Create application - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Application name | N/A | YES | -| enabled | bool | POST | Enabled | N/A | NO | -| unify | sqlxTypes.JSONText | POST | Unify properties | N/A | NO | -| config | sqlxTypes.JSONText | POST | Arbitrary JSON holding application configuration | N/A | NO | - -## Update user details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/{applicationID}` | HTTP/S | PUT | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| applicationID | uint64 | PATH | Application ID | N/A | YES | -| name | string | POST | Email | N/A | YES | -| enabled | bool | POST | Enabled | N/A | NO | -| unify | sqlxTypes.JSONText | POST | Unify properties | N/A | NO | -| config | sqlxTypes.JSONText | POST | Arbitrary JSON holding application configuration | N/A | NO | - -## Read application details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/{applicationID}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| applicationID | uint64 | PATH | Application ID | N/A | YES | - -## Remove application - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/{applicationID}` | HTTP/S | DELETE | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| applicationID | uint64 | PATH | Application ID | N/A | YES | - -## Undelete application - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/{applicationID}/undelete` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| applicationID | uint64 | PATH | Application ID | N/A | YES | - -## Fire system:application trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/application/{applicationID}/trigger` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| applicationID | uint64 | PATH | ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Attachments - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/attachment/{kind}/{attachmentID}` | Attachment details | -| `DELETE` | `/attachment/{kind}/{attachmentID}` | Delete attachment | -| `GET` | `/attachment/{kind}/{attachmentID}/original/{name}` | Serves attached file | -| `GET` | `/attachment/{kind}/{attachmentID}/preview.{ext}` | Serves preview of an attached file | - -## Attachment details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{kind}/{attachmentID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| kind | string | PATH | Kind | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - -## Delete attachment - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{kind}/{attachmentID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| kind | string | PATH | Kind | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - -## Serves attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{kind}/{attachmentID}/original/{name}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| download | bool | GET | Force file download | N/A | NO | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| name | string | PATH | File name | N/A | YES | -| kind | string | PATH | Kind | N/A | YES | - -## Serves preview of an attached file - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/attachment/{kind}/{attachmentID}/preview.{ext}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| attachmentID | uint64 | PATH | Attachment ID | N/A | YES | -| ext | string | PATH | Preview extension/format | N/A | YES | -| kind | string | PATH | Kind | N/A | YES | -| sign | string | GET | Signature | N/A | NO | -| userID | uint64 | GET | User ID | N/A | NO | - ---- - - - - -# Authentication - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/auth/` | Returns auth settings | -| `GET` | `/auth/check` | Check JWT token | -| `POST` | `/auth/impersonate` | Impersonate a user | -| `POST` | `/auth/exchange` | Exchange auth token for JWT | -| `GET` | `/auth/logout` | Logout | - -## Returns auth settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Check JWT token - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/check` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Impersonate a user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/impersonate` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | POST | ID of the impersonated user | N/A | YES | -| expire | int | POST | expiration time in seconds, must be shorter than 24h | N/A | NO | - -## Exchange auth token for JWT - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/exchange` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| token | string | POST | Token to be exchanged for JWT | N/A | YES | - -## Logout - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/logout` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Internal authentication - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `POST` | `/auth/internal/login` | Login user | -| `POST` | `/auth/internal/signup` | User signup/registration | -| `POST` | `/auth/internal/request-password-reset` | Request password reset token (via email) | -| `POST` | `/auth/internal/exchange-password-reset-token` | Exchange password reset token for new token and user info | -| `POST` | `/auth/internal/reset-password` | Reset password with exchanged password reset token | -| `POST` | `/auth/internal/confirm-email` | Confirm email with token | -| `POST` | `/auth/internal/change-password` | Changes password for current user, requires current password | - -## Login user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/login` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| email | string | POST | Email | N/A | YES | -| password | string | POST | Password | N/A | YES | - -## User signup/registration - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/signup` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| email | string | POST | Email | N/A | YES | -| username | string | POST | Username | N/A | NO | -| password | string | POST | Password | N/A | YES | -| handle | string | POST | User handle | N/A | NO | -| name | string | POST | Display name | N/A | NO | - -## Request password reset token (via email) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/request-password-reset` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| email | string | POST | Email | N/A | YES | - -## Exchange password reset token for new token and user info - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/exchange-password-reset-token` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| token | string | POST | Token | N/A | YES | - -## Reset password with exchanged password reset token - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/reset-password` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| token | string | POST | Token | N/A | YES | -| password | string | POST | Password | N/A | YES | - -## Confirm email with token - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/confirm-email` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| token | string | POST | Token | N/A | YES | - -## Changes password for current user, requires current password - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/auth/internal/change-password` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| oldPassword | string | POST | Old password | N/A | YES | -| newPassword | string | POST | New password | N/A | YES | - ---- - - - - -# System automation scripts - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/automation/` | List all available automation scripts for system resources | -| `GET` | `/automation/{bundle}-{type}.{ext}` | Serves client scripts bundle | -| `POST` | `/automation/trigger` | Triggers execution of a specific script on a system service level | - -## List all available automation scripts for system resources - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resourceTypePrefixes | []string | GET | Filter by resource prefix | N/A | NO | -| resourceTypes | []string | GET | Filter by resource type | N/A | NO | -| eventTypes | []string | GET | Filter by event type | N/A | NO | -| excludeInvalid | bool | GET | Exclude scripts that can not be used (errors) | N/A | NO | -| excludeClientScripts | bool | GET | Do not include client scripts | N/A | NO | -| excludeServerScripts | bool | GET | Do not include server scripts | N/A | NO | - -## Serves client scripts bundle - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/{bundle}-{type}.{ext}` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| bundle | string | PATH | Name of the bundle | N/A | NO | -| type | string | PATH | Bundle type | N/A | NO | -| ext | string | PATH | Bundle extension | N/A | NO | - -## Triggers execution of a specific script on a system service level - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/automation/trigger` | HTTP/S | POST | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Organisations - -Organisations represent a top-level grouping entity. There may be many organisations defined in a single deployment. - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/organisations/` | List organisations | -| `POST` | `/organisations/` | Create organisation | -| `PUT` | `/organisations/{id}` | Update organisation details | -| `DELETE` | `/organisations/{id}` | Remove organisation | -| `GET` | `/organisations/{id}` | Read organisation details | -| `POST` | `/organisations/{id}/archive` | Archive organisation | - -## List organisations - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query | N/A | NO | - -## Create organisation - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Organisation Name | N/A | YES | - -## Update organisation details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/{id}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| id | uint64 | PATH | Organisation ID | N/A | NO | -| name | string | POST | Organisation Name | N/A | YES | - -## Remove organisation - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/{id}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| id | uint64 | PATH | Organisation ID | N/A | YES | - -## Read organisation details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/{id}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| id | uint64 | PATH | Organisation ID | N/A | YES | - -## Archive organisation - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/organisations/{id}/archive` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| id | uint64 | PATH | Organisation ID | N/A | YES | - ---- - - - - -# Permissions - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/permissions/` | Retrieve defined permissions | -| `GET` | `/permissions/effective` | Effective rules for current user | -| `GET` | `/permissions/{roleID}/rules` | Retrieve role permissions | -| `DELETE` | `/permissions/{roleID}/rules` | Remove all defined role permissions | -| `PATCH` | `/permissions/{roleID}/rules` | Update permission settings | - -## Retrieve defined permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - -## Effective rules for current user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/effective` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resource | string | GET | Show only rules for a specific resource | N/A | NO | - -## Retrieve role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Remove all defined role permissions - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Update permission settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/permissions/{roleID}/rules` | HTTP/S | PATCH | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| rules | permissions.RuleSet | POST | List of permission rules to set | N/A | YES | - ---- - - - - -# Reminders - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/reminder/` | List/read reminders | -| `POST` | `/reminder/` | Add new reminder | -| `PUT` | `/reminder/{reminderID}` | Update reminder | -| `GET` | `/reminder/{reminderID}` | Read reminder by ID | -| `DELETE` | `/reminder/{reminderID}` | Delete reminder | -| `PATCH` | `/reminder/{reminderID}/dismiss` | Dismiss reminder | -| `PATCH` | `/reminder/{reminderID}/snooze` | Snooze reminder | - -## List/read reminders - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | []string | GET | Filter by reminder ID | N/A | NO | -| resource | string | GET | Only reminders of a specific resource | N/A | NO | -| assignedTo | uint64 | GET | Only reminders for a given user | N/A | NO | -| scheduledFrom | *time.Time | GET | Only reminders from this time (included) | N/A | NO | -| scheduledUntil | *time.Time | GET | Only reminders up to this time (included) | N/A | NO | -| scheduledOnly | bool | GET | Only scheduled reminders | N/A | NO | -| excludeDismissed | bool | GET | Filter out dismissed reminders | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | - -## Add new reminder - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| resource | string | POST | Resource | N/A | YES | -| assignedTo | uint64 | POST | Assigned To | N/A | YES | -| payload | sqlxTypes.JSONText | POST | Payload | N/A | YES | -| remindAt | *time.Time | POST | Remind At | N/A | NO | - -## Update reminder - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/{reminderID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | uint64 | PATH | Reminder ID | N/A | YES | -| resource | string | POST | Resource | N/A | YES | -| assignedTo | uint64 | POST | Assigned To | N/A | YES | -| payload | sqlxTypes.JSONText | POST | Payload | N/A | YES | -| remindAt | *time.Time | POST | Remind At | N/A | NO | - -## Read reminder by ID - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/{reminderID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | uint64 | PATH | Reminder ID | N/A | YES | - -## Delete reminder - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/{reminderID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | uint64 | PATH | Reminder ID | N/A | YES | - -## Dismiss reminder - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/{reminderID}/dismiss` | HTTP/S | PATCH | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | uint64 | PATH | reminder ID | N/A | YES | - -## Snooze reminder - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/reminder/{reminderID}/snooze` | HTTP/S | PATCH | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| reminderID | uint64 | PATH | reminder ID | N/A | YES | -| remindAt | *time.Time | POST | New Remind At Time | N/A | YES | - ---- - - - - -# Roles - -An organisation may have many roles. Roles may have many channels available. Access to channels may be shared between roles. - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/roles/` | List roles | -| `POST` | `/roles/` | Update role details | -| `PUT` | `/roles/{roleID}` | Update role details | -| `GET` | `/roles/{roleID}` | Read role details and memberships | -| `DELETE` | `/roles/{roleID}` | Remove role | -| `POST` | `/roles/{roleID}/archive` | Archive role | -| `POST` | `/roles/{roleID}/unarchive` | Unarchive role | -| `POST` | `/roles/{roleID}/undelete` | Undelete role | -| `POST` | `/roles/{roleID}/move` | Move role to different organisation | -| `POST` | `/roles/{roleID}/merge` | Merge one role into another | -| `GET` | `/roles/{roleID}/members` | Returns all role members | -| `POST` | `/roles/{roleID}/member/{userID}` | Add member to a role | -| `DELETE` | `/roles/{roleID}/member/{userID}` | Remove member from a role | -| `POST` | `/roles/{roleID}/trigger` | Fire system:role trigger | - -## List roles - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| query | string | GET | Search query | N/A | NO | -| deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted roles | N/A | NO | -| archived | uint | GET | Exclude (0, default), include (1) or return only (2) achived roles | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | - -## Update role details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| name | string | POST | Name of Role | N/A | YES | -| handle | string | POST | Handle for Role | N/A | YES | -| members | []string | POST | Role member IDs | N/A | NO | - -## Update role details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| name | string | POST | Name of Role | N/A | NO | -| handle | string | POST | Handle for Role | N/A | NO | -| members | []string | POST | Role member IDs | N/A | NO | - -## Read role details and memberships - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Remove role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Archive role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/archive` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Unarchive role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/unarchive` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Undelete role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/undelete` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | - -## Move role to different organisation - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/move` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| organisationID | uint64 | POST | Role ID | N/A | YES | - -## Merge one role into another - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/merge` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Source Role ID | N/A | YES | -| destination | uint64 | POST | Destination Role ID | N/A | YES | - -## Returns all role members - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/members` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Source Role ID | N/A | YES | - -## Add member to a role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/member/{userID}` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Source Role ID | N/A | YES | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Remove member from a role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/member/{userID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Source Role ID | N/A | YES | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Fire system:role trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/roles/{roleID}/trigger` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- - - - - -# Settings - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/settings/` | List settings | -| `PATCH` | `/settings/` | Update settings | -| `GET` | `/settings/{key}` | Get a value for a key | -| `POST` | `/settings/{key}` | Set value for specific setting | -| `GET` | `/settings/current` | Current compose settings | - -## List settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| prefix | string | GET | Key prefix | N/A | NO | - -## Update settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/` | HTTP/S | PATCH | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| values | settings.ValueSet | POST | Array of new settings: `[{ name: ..., value: ... }]`. Omit value to remove setting | N/A | YES | - -## Get a value for a key - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/{key}` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| ownerID | uint64 | GET | Owner ID | N/A | NO | -| key | string | PATH | Setting key | N/A | YES | - -## Set value for specific setting - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/{key}` | HTTP/S | POST | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| key | string | PATH | Key | N/A | YES | -| upload | *multipart.FileHeader | POST | File to upload | N/A | NO | -| ownerID | uint64 | POST | Owner ID | N/A | NO | - -## Current compose settings - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/settings/current` | HTTP/S | GET | | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Statistics - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/stats/` | List system statistics | - -## List system statistics - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/stats/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Subscription - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/subscription/` | Returns current subscription status | - -## Returns current subscription status - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/subscription/` | HTTP/S | GET | -Warning: implode(): Invalid arguments passed in /private/tmp/Users/darh/Work.crust/corteza-server/codegen/templates/README.tpl on line 32 - | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | - ---- - - - - -# Users - -| Method | Endpoint | Purpose | -| ------ | -------- | ------- | -| `GET` | `/users/` | Search users (Directory) | -| `POST` | `/users/` | Create user | -| `PUT` | `/users/{userID}` | Update user details | -| `GET` | `/users/{userID}` | Read user details | -| `DELETE` | `/users/{userID}` | Remove user | -| `POST` | `/users/{userID}/suspend` | Suspend user | -| `POST` | `/users/{userID}/unsuspend` | Unsuspend user | -| `POST` | `/users/{userID}/undelete` | Undelete user | -| `POST` | `/users/{userID}/password` | Set's or changes user's password | -| `GET` | `/users/{userID}/membership` | Add member to a role | -| `POST` | `/users/{userID}/membership/{roleID}` | Add role to a user | -| `DELETE` | `/users/{userID}/membership/{roleID}` | Remove role from a user | -| `POST` | `/users/{userID}/trigger` | Fire system:user trigger | - -## Search users (Directory) - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | []string | GET | Filter by user ID | N/A | NO | -| roleID | []string | GET | Filter by role membership | N/A | NO | -| query | string | GET | Search query to match against users | N/A | NO | -| username | string | GET | Search username to match against users | N/A | NO | -| email | string | GET | Search email to match against users | N/A | NO | -| handle | string | GET | Search handle to match against users | N/A | NO | -| kind | types.UserKind | GET | Kind (normal, bot) | N/A | NO | -| incDeleted | bool | GET | [Deprecated] Include deleted users (requires 'access' permission) | N/A | NO | -| incSuspended | bool | GET | [Deprecated] Include suspended users | N/A | NO | -| deleted | uint | GET | Exclude (0, default), include (1) or return only (2) deleted users | N/A | NO | -| suspended | uint | GET | Exclude (0, default), include (1) or return only (2) suspended users | N/A | NO | -| limit | uint | GET | Limit | N/A | NO | -| offset | uint | GET | Offset | N/A | NO | -| page | uint | GET | Page number (1-based) | N/A | NO | -| perPage | uint | GET | Returned items per page (default 50) | N/A | NO | -| sort | string | GET | Sort items | N/A | NO | - -## Create user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| email | string | POST | Email | N/A | YES | -| name | string | POST | Name | N/A | NO | -| handle | string | POST | Handle | N/A | NO | -| kind | types.UserKind | POST | Kind (normal, bot) | N/A | NO | - -## Update user details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}` | HTTP/S | PUT | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | -| email | string | POST | Email | N/A | YES | -| name | string | POST | Name | N/A | YES | -| handle | string | POST | Handle | N/A | NO | -| kind | types.UserKind | POST | Kind (normal, bot) | N/A | NO | - -## Read user details - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Remove user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Suspend user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/suspend` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Unsuspend user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/unsuspend` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Undelete user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/undelete` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Set's or changes user's password - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/password` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | -| password | string | POST | New password | N/A | YES | - -## Add member to a role - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/membership` | HTTP/S | GET | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Add role to a user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/membership/{roleID}` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Remove role from a user - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/membership/{roleID}` | HTTP/S | DELETE | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| roleID | uint64 | PATH | Role ID | N/A | YES | -| userID | uint64 | PATH | User ID | N/A | YES | - -## Fire system:user trigger - -#### Method - -| URI | Protocol | Method | Authentication | -| --- | -------- | ------ | -------------- | -| `/users/{userID}/trigger` | HTTP/S | POST | Client ID, Session ID | - -#### Request parameters - -| Parameter | Type | Method | Description | Default | Required? | -| --------- | ---- | ------ | ----------- | ------- | --------- | -| userID | uint64 | PATH | ID | N/A | YES | -| script | string | POST | Script to execute | N/A | YES | - ---- \ No newline at end of file diff --git a/pkg/api/docs.go b/pkg/api/docs.go new file mode 100644 index 000000000..e2fe0ceb0 --- /dev/null +++ b/pkg/api/docs.go @@ -0,0 +1,18 @@ +package api + +import ( + "fmt" + "github.com/cortezaproject/corteza-server/docs" + "github.com/goware/statik/fs" + "net/http" +) + +func serveDocs(w http.ResponseWriter, r *http.Request) { + root, err := fs.New(docs.Asset) + if err != nil { + http.Error(w, fmt.Sprintf("could not read embeded filesystem: %v", err.Error()), http.StatusInternalServerError) + return + } + + http.StripPrefix("/docs", http.FileServer(root)).ServeHTTP(w, r) +} diff --git a/pkg/api/server/docs.go b/pkg/api/server/docs.go new file mode 100644 index 000000000..39dd5601f --- /dev/null +++ b/pkg/api/server/docs.go @@ -0,0 +1,18 @@ +package server + +import ( + "fmt" + "github.com/cortezaproject/corteza-server/docs" + "github.com/goware/statik/fs" + "net/http" +) + +func serveDocs(w http.ResponseWriter, r *http.Request) { + root, err := fs.New(docs.Asset) + if err != nil { + http.Error(w, fmt.Sprintf("could not read embeded filesystem: %v", err.Error()), http.StatusInternalServerError) + return + } + + http.StripPrefix("/docs", http.FileServer(root)).ServeHTTP(w, r) +} diff --git a/pkg/api/server/server.go b/pkg/api/server/server.go index d07fc0462..d6c37e99c 100644 --- a/pkg/api/server/server.go +++ b/pkg/api/server/server.go @@ -143,4 +143,7 @@ func (s server) bindMiscRoutes(router chi.Router) { if s.httpOpt.EnableHealthcheckRoute { router.Get("/healthcheck", healthcheck.HttpHandler()) } + + //router.Group(serveDocs2) + router.HandleFunc("/docs*", serveDocs) }