openapi: 3.0.0 info: description: | DataBag provides storage for decentralized identity based self-hosting apps. It is intended to support sharing of personal data and hosting group conversations. version: "0.0.1" title: DataBag contact: email: roland.osborne@gmail.com license: name: Apache 2.0 url: 'http://www.apache.org/licenses/LICENSE-2.0.html' tags: - name: revision description: websocket endpoint for receiving module revision events - name: admin description: account creation for portal backend. - name: account description: account configuration for portal backend. supports app attachment - name: authenticate description: authenticate holder of identity for external service - name: profile description: getting and setting of the public profile - name: share description: access control for personal subjects, associates content and cards - name: contact description: connection to other identities, hook receiver - name: content description: posting and listing of personal subjects, group and tag managment - name: converstaion description: group sharing of subjects paths: # Concetps: ## access tokens for bearer auth:prefix for bearer tokens types ### app: app_ ### contact: cnt_ ### pass code: pas_ ### account reset: res_ ### account create: act_ ## subject based content provides external definition of datatypes /revision: get: tags: - revision description: Websocket placeholder endpoint for receiving revision updates operationId: websocket responses: '200': description: Awaiting announce /admin/claimable: get: tags: - admin description: Check if portal params have been set operationId: node-configurable responses: '200': description: success '405': description: admin already configured '500': description: internal server error /admin/config: post: tags: - admin description: Set admin password and node domain operationId: add-node-config security: - basicAuth: [] parameters: - name: domain in: query description: domain of node required: true schema: type: string responses: '200': description: success '405': description: admin already configured '500': description: internal server error /admin/config/domain: put: tags: - admin description: Set portal domain operationId: set-node-config-domain security: - basicAuth: [] responses: '200': description: success '401': description: authentication error '500': description: internal server error requestBody: content: application/json: schema: type: string /admin/token: put: tags: - admin description: Create password reset token url operationId: set-node-account security: - basicAuth: [] parameters: - name: guid in: query description: id of profile to access required: true schema: type: string responses: '201': description: generated content: application/json: schema: type: string '401': description: invalid password '404': description: unknown portal '500': description: internal server error post: tags: - admin description: Create new account token url operationId: add-node-account security: - basicAuth: [] responses: '201': description: generated content: application/json: schema: type: string '401': description: invalid password '500': description: internal server error /admin/accounts: get: tags: - admin description: Get list of portals operationId: get-node-accounts security: - basicAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Profile' '401': description: invalid password '404': description: handle not found '500': description: internal server error /admin/accounts/{guid}: delete: tags: - admin description: Remove account from node operationId: remove-node-account security: - basicAuth: [] parameters: - name: guid in: path description: id of account to delete required: true schema: type: string responses: '200': description: successful operation '401': description: invalid authentication '404': description: account not found '500': description: internal server error /admin/accounts/{guid}/image: get: tags: - admin description: Get profile of specified account operationId: get-node-account-image security: - basicAuth: [] parameters: - name: guid in: path description: id of specified account required: true schema: type: string responses: '200': description: successful operation content: application/octet-stream: schema: type: string format: binary '401': description: invalid password '404': description: account not found '500': description: internal server error /account/claimable: get: tags: - account description: Check if username is available operationId: check-username security: - bearerAuth: [] parameters: - name: username in: query description: username to check required: true schema: type: string responses: '200': description: success '401': description: authentication error '405': description: username already taken '500': description: internal server error /account/token: get: tags: - account description: Check if bearer token is valid operationId: check-token security: - bearerAuth: [] responses: '200': description: success '401': description: invalid token '500': description: internal server error /account/profile: get: tags: - account description: Get public profile object operationId: get-account-profile security: - basicAuth: [] responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Profile' '401': description: authentication error '500': description: internal server error post: tags: - account description: Add a new account operationId: add-account security: - bearerAuth: [] - basicAuth: [] responses: '201': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Profile' '400': description: invalid handle or password '401': description: invalid bearer token '500': description: internal server error /account/authentication: post: tags: - account description: Generate token to reset authentication operationId: add-account-authentication security: - basicAuth: [] responses: '201': description: generated content: application/json: schema: type: string '401': description: invalid password '500': description: internal server error put: tags: - account description: Apply account reset token to set handle and password operationId: set-account-authentication security: - bearerAuth: [] - basicAuth: [] responses: '201': description: successful operation '401': description: invalid token '406': description: invalid handle or password '500': description: internal server error /account/attachment: post: tags: - account description: Generate token to attach an app to the account operationId: add-account-app security: - basicAuth: [] responses: '201': description: generated content: application/json: schema: type: string '401': description: invalid password '500': description: internal server error put: tags: - account description: Apply the app token and attach an app to the account operationId: set-account-app security: - bearerAuth: [] responses: '201': description: generated content: application/json: schema: type: string '401': description: invalid token '406': description: app limit reached '500': description: internal server error requestBody: content: application/json: schema: $ref: '#/components/schemas/AppData' /account/apps: get: tags: - account description: Get list of attached apps operationId: get-account-apps security: - basicAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/App' '401': description: invalid password '500': description: internal server error /account/apps/{appId}: delete: tags: - account description: Get list of attached apps operationId: remove-account-app security: - basicAuth: [] parameters: - name: appId in: path description: specified app id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid password '404': description: app not found '500': description: internal server error /authenticate: put: tags: - authenticate description: Sign payload containing external token for authentication operationId: authenticate security: - bearerAuth: [] parameters: - name: token in: query description: token to sign in message response required: true schema: type: string responses: '201': description: generated content: application/json: schema: $ref: '#/components/schemas/DataMessage' '401': description: invalid token '500': description: internal server error /profile: get: tags: - profile description: Get profile view object operationId: get-profile security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Profile' '401': description: invalid token '500': description: internal server error put: tags: - profile description: Set profile data operationId: set-profile security: - bearerAuth: [] responses: '200': description: successful operation '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: $ref: '#/components/schemas/ProfileData' /profile/image: get: tags: - profile description: Get profile image operationId: get-profile-image security: - bearerAuth: [] responses: '200': description: successful operation content: application/octet-stream: schema: type: string format: binary '401': description: invalid token '500': description: internal server error /profile/message: get: tags: - profile description: Get profile message operationId: get-profile-message responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/DataMessage' '401': description: invalid token '500': description: internal server error /share/groups: get: tags: - share description: Get groups for sharing operationId: get-share-groups security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Group' '401': description: invalid token '500': description: internal server error post: tags: - share description: Add a group for sharing operationId: add-share-group security: - bearerAuth: [] responses: '201': description: entry created '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: type: string /share/groups/{groupId}: put: tags: - share description: Update group for sharing operationId: update-share-group security: - bearerAuth: [] parameters: - name: groupId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: type: string delete: tags: - share description: Get groups for sharing operationId: remove-share-group security: - bearerAuth: [] parameters: - name: groupId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid token '500': description: internal server error /contact/cards: post: tags: - contact description: Add card entry operationId: add-contact-card security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Card' '401': description: invalid password '404': description: not found '500': description: internal server error /contact/cards/view: get: tags: - contact description: Get list of cards operationId: get-contact-cards security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/CardView' '401': description: invalid password '500': description: internal server error /contact/cards/{cardId}: get: tags: - contact description: Get card entry operationId: get-contact-card security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Card' '401': description: invalid password '404': description: not found '500': description: internal server error delete: tags: - contact description: Remove card entry operationId: remove-contact-card security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid password '404': description: not found '500': description: internal server error /contact/cards/{cardId}/status: put: tags: - contact description: Update card status operationId: set-contact-card-status security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string - name: token in: query description: token for accessing card required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error requestBody: content: application/json: schema: type: string enum: [ pending, confirmed, connecting, connected ] /contact/cards/{cardId}/openMessage: get: tags: - contact description: Get message for opening card connection operationId: get-contact-open-message security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/DataMessage' '401': description: invalid password '404': description: not found '500': description: internal server error put: tags: - contact description: Set message for opening card connection operationId: set-contact-open-message parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardStatus' '401': description: invalid password '404': description: not found '500': description: internal server error requestBody: content: application/json: schema: $ref: '#/components/schemas/DataMessage' /contact/cards/{cardId}/closeMessage: get: tags: - contact description: Get message for closing card connection operationId: get-contact-close-message security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/DataMessage' '401': description: invalid password '404': description: not found '500': description: internal server error put: tags: - contact description: Set message for closing card connection operationId: set-contact-close-message parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardStatus' '401': description: invalid password '404': description: not found '500': description: internal server error requestBody: content: application/json: schema: $ref: '#/components/schemas/DataMessage' /contact/cards/{cardId}/profile: get: tags: - contact description: Get profile of card entry operationId: get-contact-profile security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardProfile' '401': description: invalid password '404': description: not found '500': description: internal server error put: tags: - contact description: Set profile of card entry operationId: set-contact-profile security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardProfile' '401': description: invalid password '404': description: not found '500': description: internal server error requestBody: content: application/json: schema: $ref: '#/components/schemas/Profile' /contact/cards/{cardId}/data: get: tags: - contact description: Get data of card entry operationId: get-contact-data security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error /contact/cards/{cardId}/notes: put: tags: - contact description: Update card notes operationId: set-contact-card-notes security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error requestBody: content: application/json: schema: type: string delete: tags: - contact description: Clear card notes operationId: clear-contact-card-notes security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error /contact/cards/{cardId}/shares/{shareId}: put: tags: - contact description: Update card notes operationId: set-contact-card-share security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string - name: shareId in: path description: specified share id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error delete: tags: - contact description: Clear card share group operationId: clear-contact-card-share security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string - name: shareId in: path description: specified share id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/CardData' '401': description: invalid password '404': description: not found '500': description: internal server error /contact/blocked: get: tags: - contact description: Get list of blocked cards operationId: get-contact-blocked-cards security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: type: string '401': description: invalid password '404': description: not found '500': description: internal server error /contact/blocked/{cardId}: post: tags: - contact description: Add card from blocked list operationId: add-contact-blocked-card security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid password '404': description: not found '500': description: internal server error delete: tags: - contact description: Remove card from blocked list operationId: remove-contact-blocked-card security: - bearerAuth: [] parameters: - name: cardId in: path description: specified card id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid password '404': description: not found '500': description: internal server error /contact/profile/revision: put: tags: - contact description: Hook receiver for card profile revision updates operationId: revision-profile-hook security: - bearerAuth: [] responses: '200': description: revision set '401': description: not authorized '500': description: internal server error requestBody: content: application/json: schema: type: integer format: int64 /contact/content/revision: put: tags: - contact description: Hook receiver for card content revision updates operationId: revision-content-hook security: - bearerAuth: [] responses: '200': description: revision set '401': description: not authorized '500': description: internal server error requestBody: content: application/json: schema: type: integer format: int64 /content/articleBlocks/view: get: tags: - content description: Get view of content blocks operationId: get-article-block-view security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: invalid password '500': description: internal server error /content/articleBlocks/{blockId}: get: tags: - content description: Get articles from specified block operationId: get-article-block security: - bearerAuth: [] parameters: - name: blockId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Article' '401': description: invalid password '500': description: internal server error /content/articleBlocks/{blockId}/view: get: tags: - content description: Get view articles in content block operationId: get-article-view security: - bearerAuth: [] parameters: - name: blockId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: invalid password '500': description: internal server error /content/articles: post: tags: - content description: Add an content article operationId: add-article security: - bearerAuth: [] responses: '201': description: entry created content: application/json: schema: type: object properties: blockId: type: string blockRevision: type: integer format: int64 article: $ref: '#/components/schemas/Article' '401': description: invalid token '500': description: internal server error /content/articles/{articleId}: get: tags: - content description: Get specified article operationId: get-article security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Article' '401': description: invalid password '500': description: internal server error delete: tags: - content description: Remove specified article operationId: remove-article security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid password '500': description: internal server error /content/articles/{articleId}/subject: put: tags: - content description: Add an content article operationId: update-content-article security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '201': description: entry created '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: type: object required: - type - data properties: type: type: string data: type: string /content/articles/{articleId}/groups/{groupId}: post: tags: - content description: set sharing group for article operationId: set-article-group security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: groupId in: path description: specified share group id required: true schema: type: string responses: '200': description: entry set '401': description: invalid token '500': description: internal server error delete: tags: - content description: clear sharing group for article operationId: clear-article-group security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: groupId in: path description: specified share id required: true schema: type: string responses: '200': description: entry removed '401': description: invalid token '500': description: internal server error /content/articles/{articleId}/labels/{labelId}: post: tags: - content description: set orginizational label for article operationId: set-article-label security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: labelId in: path description: specified label id required: true schema: type: string responses: '200': description: entry set '401': description: invalid token '500': description: internal server error delete: tags: - content description: clear orginizationl label for article operationId: clear-article-label security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: labelId in: path description: specified label id required: true schema: type: string responses: '200': description: entry cleared '401': description: invalid token '500': description: internal server error /content/articles/{articleId}/tagBlocks/view: get: tags: - content description: Get view tag blocks in article operationId: get-article-tag-block-view security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: invalid password '500': description: internal server error /content/articles/{articleId}/tagBlocks/{blockId}/view: get: tags: - content description: Get view tag blocks in article operationId: get-tag-view security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: blockId in: path description: specified block id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: invalid password '500': description: internal server error /content/articles/{articleId}/tagBlocks/{blockId}: get: tags: - content description: Get tags from specified block operationId: get-tag-block security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: blockId in: path description: specified block id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: invalid password '500': description: internal server error /content/articles/{articleId}/tags: post: tags: - content description: Add an content article operationId: add-article-tag security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '201': description: entry created content: application/json: schema: type: object properties: blockId: type: string blockRevision: type: integer format: int64 tag: $ref: '#/components/schemas/Tag' '401': description: invalid token '500': description: internal server error /content/articles/{articleId}/tags/{tagId}: get: tags: - content description: Add an content article operationId: get-article-tag security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: tagId in: path description: specified tag id required: true schema: type: string responses: '201': description: entry created content: application/json: schema: $ref: '#/components/schemas/Tag' '401': description: invalid token '404': description: tag not found '500': description: internal server error delete: tags: - content description: Add an content article operationId: remove-article-tag security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: tagId in: path description: specified tag id required: true schema: type: string responses: '200': description: entry removed '401': description: invalid token '404': description: tag not found '500': description: internal server error /content/articles/{articleId}/assets: get: tags: - content description: Get assets attached to article operationId: get-article-assets security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '201': description: entry created content: application/json: schema: type: array items: $ref: '#/components/schemas/Asset' '401': description: invalid token '500': description: internal server error post: tags: - content description: Add an content article operationId: add-article-asset security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: transforms in: query description: transforms to apply required: false schema: type: array items: type: string responses: '201': description: entry created content: application/json: schema: $ref: '#/components/schemas/Asset' '401': description: invalid token '500': description: internal server error requestBody: content: multipart/form-data: schema: type: object properties: fileName: type: string format: binary /content/articles/{articleId}/assets/{assetId}: get: tags: - content description: Get asset attached to article operationId: get-article-asset security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: assetId in: path description: specified asset id required: true schema: type: string responses: '200': description: article attachment content: application/octet-stream: #asset specific schema: type: string format: binary '401': description: invalid token '404': description: asset not found '500': description: internal server error delete: tags: - content description: Remove asset attached to article operationId: remove-article-asset security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string - name: assetId in: path description: specified asset id required: true schema: type: string responses: '200': description: article attachment content: application/octet-stream: #asset specific schema: type: string format: binary '401': description: invalid token '404': description: asset not found '500': description: internal server error /content/articles/{articleId}/confirmed: put: tags: - content description: set confirmed state of article operationId: set-article-confirmed security: - bearerAuth: [] parameters: - name: articleId in: path description: specified article id required: true schema: type: string responses: '200': description: entry set '401': description: invalid token '404': description: article not found '500': description: internal server error requestBody: content: application/json: schema: type: boolean /content/labels: get: tags: - content description: Get labels for organization operationId: get-content-labels security: - bearerAuth: [] responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Label' '401': description: invalid token '500': description: internal server error post: tags: - content description: Add a label for organization operationId: add-content-label security: - bearerAuth: [] responses: '201': description: entry created '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: type: string /content/labels/{labelId}: put: tags: - content description: Update label for organization operationId: update-content-label security: - bearerAuth: [] parameters: - name: labelId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid token '500': description: internal server error requestBody: content: application/json: schema: type: string delete: tags: - content description: Remove organizational label operationId: remove-content-label security: - bearerAuth: [] parameters: - name: labelId in: path description: specified label id required: true schema: type: string responses: '200': description: successful operation '401': description: invalid token '500': description: internal server error # /conversation/dialogues/{dialogueId}/sync - s # /conversation/dialogues/{dialogueId}/insights/{guid} - a,d # /conversation/insights/{dialogueId} a,d /conversation/dialogues: get: tags: - conversation description: Retrieve all dialogues. operationId: get-dialogues security: - bearerAuth: [] responses: '200': description: success content: application/json: schema: type: array items: $ref: '#/components/schemas/Dialogue' '401': description: permission denied '500': description: internal server error post: tags: - conversation description: Create and host a new dialogue. Authroization granted to an app token of the account holder. operationId: add-dialogue security: - bearerAuth: [] responses: '200': description: success content: application/json: schema: type: array items: $ref: '#/components/schemas/Dialogue' '401': description: permission denied '500': description: internal server error /conversation/dialogues/{dialogueId}/subject: put: tags: - conversation description: Set the subject for a dialogue. Authorization granted the an app token for the account holder. operationId: set-dialogue-subject security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string responses: '201': description: success '401': description: permission denied '404': description: dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: object required: - type - data properties: type: type: string data: type: string /conversation/dialogues/{dialogueId}/active: put: tags: - conversation description: Set active state of dialogue. If a dialogue is inactive any update to the topics will fail. Authorization is granted to an app token of the account holder. operationId: set-dialogue-active security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: boolean /conversation/dialogues/{dialogueId}/insight/{guid}: post: tags: - conversation description: Add insight to a dialogue. This endpoint will automatically invoke the add insight on the contact's node. Authorization is granted to the app token of the account holder. operationId: add-dialogue-insight security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: guid in: path description: specified card id required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: guid or dialogue not found '500': description: internal server error delete: tags: - conversation description: Remove an insight from a dialogue. This endpoint will authomatically invoke the delete insight endpoint on the contact's node. Authorization is granted to the app token of the accoun holder. operationId: remove-dialogue-insight security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: guid in: path description: specified card id required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: guid or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/insight/{guid}/status: put: tags: - conversation description: Set active status for contact on the host node. Access is granted to a contact token for an accound with the specified guid operationId: set-dialogue-insight-active security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: guid in: path description: specified card id required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: guid or dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: string enum: [ active, inactive, dismissed ] /conversation/dialogues/{dialogueId}: delete: tags: - conversation description: Remove specified dialogue. This endpoint will authomatically invoke the delete insight endpoint on all of the contacts' nodes. Access is granted to an app token for the account holder. operationId: remove-dialogue security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: dialogue not found '500': description: internal server error /conversation/insights: get: tags: - conversation description: Retrieve all insights. Access granted to app token for the account holder. operationId: get-insights security: - bearerAuth: [] responses: '200': description: success content: application/json: schema: type: array items: $ref: '#/components/schemas/Insight' '401': description: invalid token '500': description: internal server error /conversation/insights/{guid}/dialogues/{dialogueId}: post: tags: - conversation description: Create or update an insight. Access granted to a contact token for a contact with the specified guid. This endpoint is invoked by the webhook from the contact node. operationId: add-insight-dialogue security: - bearerAuth: [] parameters: - name: guid in: path description: id of card hosting the dialogue required: true schema: type: string - name: dialogueId in: path description: dialogue with insight id to update required: true schema: type: string responses: '200': description: success content: application/json: schema: type: string enum: [ active, inactive, dismissed ] '401': description: permission denied '404': description: dialogue or guid not found '500': description: internal server error requestBody: content: application/json: schema: type: integer format: int64 delete: tags: - conversation description: Remove a specified insight. If the referenced dialogue is still active, the insight will get recreated with the next hook receiver update. Access granted to app token of account holder or contact token of dialogue host. operationId: set-insight-dialogue security: - bearerAuth: [] parameters: - name: guid in: path description: id of card hosting the dialogue required: true schema: type: string - name: dialogueId in: path description: insight id to update required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: dialogue or guid not found '500': description: internal server error /conversation/insights/{guid}/dialogues/{dialogueId}/status: put: tags: - conversation description: Set the active status of an insight. This will cause the hook receiver to return an inactive status. Access granted to app token of account holder. operationId: set-insight-dialogue-active security: - bearerAuth: [] parameters: - name: guid in: path description: id of card hosting the dialogue required: true schema: type: string - name: dialogueId in: path description: dialogue with insight id to update required: true schema: type: string responses: '200': description: success '401': description: permission denied '404': description: dialogue or guid not found '500': description: internal server error requestBody: content: application/json: schema: type: string enum: [ active, inactive, dismissed ] /conversation/dialogues/{dialogueId}/topicBlocks/view: get: tags: - conversation description: Get a view of the topicBlocks within a dialogue. Authorization granted to account holder app token or dialogue member contact token who is also a member of the dialogue operationId: get-topic-block-view security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string responses: '200': description: success content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: permission denied '404': description: dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topicBlocks/{blockId}: get: tags: - conversation description: Get the topics within a topicBlock. Only the account holder and the topic creator will retrieve pending topics. Authorization granted to account holder app token or dialogue member contact token who is also a member of the dialogue operationId: get-topic-block security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: blockId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Topic' '401': description: permission denied '404': description: block or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topicBlocks/{blockId}/view: get: tags: - conversation description: Get a view of the topics within a topicBlock. Authorization granted to account holder app token or dialogue member contact token who is also a member of the dialogue. operationId: get-topic-view security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: blockId in: path description: specified group id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: permission denied '404': description: block or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics: post: tags: - conversation description: Add a topic to a dialogue. The response contains the topicBlock ID and topicBlock revision to which the topic is assigned. Authorization granted to account holder app token or dialogue member contact token who is a member of the dialogue. operationId: add-dialogue-topic security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string responses: '201': description: entry created content: application/json: schema: type: object properties: blockId: type: string blockRevision: type: integer format: int64 topic: $ref: '#/components/schemas/Topic' '401': description: permission denied '403': description: inactive dialogue '404': description: dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}: get: tags: - conversation description: Retrieve a specified dialogue topic. Authorization granted to account holder app token or dialogue member contact token who is a member of the dialogue. operationId: get-dialogue-topic security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: $ref: '#/components/schemas/Topic' '401': description: permission denied '404': description: topic or dialogue not found '500': description: internal server error delete: tags: - conversation description: Remove a topic from a dialogue. Authorization granted to account holder app token or dialogue member contact token who is either the topic createor or the account holder. operationId: remove-dialogue-topic security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '200': description: successful operation '401': description: permission denied '403': description: inactive dialogue '404': description: topic or dilaogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}/subject: put: tags: - conversation description: Set the subject for a topic. Authorization granted to account holder app token or dialogue member contact token who is also the creator of the topic. operationId: set-topic-subject security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '201': description: entry created '401': description: invalid token '403': description: inactive dialogue '404': description: topic or dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: object required: - type - data properties: type: type: string data: type: string /conversation/dialogues/{dialogueId}/{topicId}/tagBlocks/view: get: tags: - conversation description: Get a view of all of the tags within a block. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: get-topic-tag-block-view security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: permission denied '404': description: topic or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/{topicId}/tagBlocks/{blockId}/view: get: tags: - conversation description: Get a view of all of the tags within a block. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: get-topic-tag-view security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: blockId in: path description: specified block id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: type: object properties: id: type: string revision: type: integer format: int64 '401': description: permission denied '404': description: block, topic or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}/tagBlocks/{blockId}: get: tags: - conversation description: Get all of the tags within a tag block. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: get-topic-tag-block security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: blockId in: path description: specified block id required: true schema: type: string responses: '200': description: successful operation content: application/json: schema: type: array items: $ref: '#/components/schemas/Tag' '401': description: permission denied '404': description: block, topic, or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}/tags: post: tags: - conversation description: Add a tag to specified topic. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. The body of the post contains the subject of the tag, which can have no associated assets. operationId: add-conversation-topic-tag security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '201': description: entry created content: application/json: schema: type: object properties: blockId: type: string blockRevision: type: integer format: int64 tag: $ref: '#/components/schemas/Tag' '401': description: permission denied '403': description: inactive dialogue '404': description: topic or dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: object required: - type - data properties: type: type: string data: type: string /conversation/dialogues/{dialogueId}/topics/{topicId}/tags/{tagId}: get: tags: - conversation description: Retrieve specified tag on the topic. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: get-topic-tag security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: tagId in: path description: specified tag id required: true schema: type: string responses: '201': description: success content: application/json: schema: $ref: '#/components/schemas/Tag' '401': description: permission denied '404': description: tag, topic, or dialogue not found '500': description: internal server error delete: tags: - conversation description: Remove specified tag from the topic. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: remove-topic-tag security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: tagId in: path description: specified tag id required: true schema: type: string responses: '200': description: success '401': description: permission denied '403': description: inactive dialogue '404': description: tag, topic, or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}/assets: get: tags: - conversation description: Get all assets associated with the specified topic. Authorization granted to account holder app token or dialogue member contact token who has access to the topic. operationId: get-topic-assets security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '201': description: success content: application/json: schema: type: array items: $ref: '#/components/schemas/Asset' '401': description: permission denied '404': description: topic or dialogue not found '500': description: internal server error post: tags: - conversation description: Add an asset to a topic. The asset will be processed and transcoded according to the specified transformation. Authorization granted to account holder app token or dialogue member contact token who is also the creator of the topic. operationId: add-topic-asset security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: transforms in: query description: transforms to apply required: false schema: type: array items: type: string responses: '201': description: success content: application/json: schema: $ref: '#/components/schemas/Asset' '401': description: permission denied '403': description: inactive dialogue '404': description: topic or dialogue not found '500': description: internal server error requestBody: content: multipart/form-data: schema: type: object properties: fileName: type: string format: binary /conversation/dialogues/{dialogueId}/topics/{topicId}/assets/{assetId}: get: tags: - conversation description: Retrieve an asset associated with a topic. All transformed assets can be retrieved by anyone with access to the topic, but the original asset can only be retrieved by the author of the topic. Authorization granted to account holder app token or dialogue member contact token who is also the creator of the topic. operationId: get-topic-asset security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: assetId in: path description: specified asset id required: true schema: type: string responses: '200': description: success content: application/octet-stream: #asset specific schema: type: string format: binary '401': description: permission denied '404': description: asset, topic or dialogue not found '500': description: internal server error delete: tags: - conversation description: Remove and delete an asset associated with a topic. Authorization granted to account holder app token or dialogue member contact token who is also the creator of the topic. operationId: remove-topic-asset security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string - name: assetId in: path description: specified asset id required: true schema: type: string responses: '200': description: success '401': description: permission denied '403': description: inactive dialogue '404': description: asset, topic or dialogue not found '500': description: internal server error /conversation/dialogues/{dialogueId}/topics/{topicId}/confirmed: put: tags: - conversation description: After the assets have been uploaded and the subject has been set, the topic should be set to confirmed (true) to make the topic available to others. Authorization granted to account holder app token or dialogue member contact token who is also the creator of the topic. security: - bearerAuth: [] parameters: - name: dialogueId in: path description: specified dialogue id required: true schema: type: string - name: topicId in: path description: specified topic id required: true schema: type: string responses: '200': description: success '401': description: permission denied '403': description: inactive dialogue '404': description: topic or dialogue not found '500': description: internal server error requestBody: content: application/json: schema: type: boolean externalDocs: description: Find out more about Swagger url: 'http://swagger.io' components: schemas: Announce: type: object required: - appToken properties: appToken: type: string Revsion: type: object required: - profile - content - labels - sharing - card - blocked - dialogue - insight properties: profile: type: integer format: int64 content: type: integer format: int64 labels: type: integer format: int64 sharing: type: integer format: int64 card: type: integer format: int64 dialogue: type: integer format: int64 insight: type: integer format: int64 Profile: type: object required: - guid - revision - node properties: guid: type: string handle: type: string name: type: string description: type: string location: type: string image: type: string format: base64 encoded data revision: type: integer format: int64 node: type: string ProfileData: type: object properties: handle: type: string name: type: string description: type: string location: type: string image: type: string App: type: object required: - appId - appData - attached properties: appId: type: string appData: $ref: '#/components/schemas/AppData' attached: type: integer format: int32 AppData: type: object properties: name: type: string description: type: string url: type: string image: type: string format: base64 encoded image CardView: type: object required: - guid - profileRevision - contentRevision - cardRevision properties: guid: type: string cardRevision: type: integer format: int64 profileRevision: type: integer format: int64 contentRevision: type: integer format: int64 converstaionRevision: type: integer format: int64 CardProfile: type: object required: - node properties: handle: type: string name: type: string description: type: string location: type: string revision: type: integer format: int64 imageSet: type: boolean node: type: string CardData: type: object required: - status properties: revision: type: integer format: int64 status: type: string enum: [ pending, confirmed, connecting, connected ] details: type: string token: type: string groups: type: array items: type: string CardStatus: type: object required: - status properties: status: type: string enum: [ pending, confirmed, connecting, connected ] token: type: string Card: type: object required: - cardProfile - cardData - contentRevision - conversationRevision properties: cardProfile: $ref: '#/components/schemas/CardProfile' cardData: $ref: '#/components/schemas/CardData' contentRevision: type: integer format: int64 converstaionRevision: type: integer format: int64 Subject: type: object required: - postId - revision - type - data - created - modified properties: postId: type: string revision: type: integer format: int64 type: type: string data: type: string created: type: integer format: int32 Asset: type: object required: - assetId properties: assetId: type: string transform: type: string status: type: string enum: [ pending, processing, ready, error ] Tag: type: object required: - guid - subject properties: guid: type: string subject: $ref: '#/components/schemas/Subject' Insight: type: object required: - insightId - revision - guid - status properties: insightId: type: string revision: type: integer format: int64 guid: type: string status: type: string enum: [ active, inactive, dismissed ] Dialogue: type: object required: - dialogueId - revision - active - subject - insights properties: dialogueId: type: string revision: type: integer format: int64 active: type: boolean subject: $ref: '#/components/schemas/Subject' insights: type: array items: type: object properties: guid: type: string status: type: string enum: [ active, offsync, inactive, dismissed ] Topic: type: object required: - topicId - revision - status - subject - tagCount - tagUpdated - tagRevision properties: articleId: type: string revision: type: integer format: int64 status: type: string enum: [ unconfirmed, confirmed, complete, error ] subject: $ref: '#/components/schemas/Subject' tagCount: type: integer format: int32 tagUpdate: type: integer format: int32 tagRevision: type: integer format: int64 Article: type: object required: - articleId - revision - status - subject - labels - groups - tagCount - tagUpdated - tagRevision properties: articleId: type: string revision: type: integer format: int64 status: type: string enum: [ unconfirmed, confirmed, complete, error ] subject: $ref: '#/components/schemas/Subject' labels: type: array items: type: string groups: type: array items: type: string tagCount: type: integer format: int32 tagUpdate: type: integer format: int32 tagRevision: type: integer format: int64 Note: type: object required: - noteId - guid - revision - status - subject - tagCount - tagUpdated - tagRevision properties: topicId: type: string guid: type: string revision: type: integer format: int64 status: type: string enum: [ unconfirmed, confirmed, complete, error ] subject: $ref: '#/components/schemas/Subject' tagCount: type: integer format: int32 tagUpdate: type: integer format: int32 tagRevision: type: integer format: int64 Group: type: object required: - groupId - name properties: groupId: type: string name: type: string Label: type: object required: - labelId - name properties: labelId: type: string name: type: string Authenticate: type: object required: - guid - token - timestamp properties: token: type: string timestamp: type: integer format: int32 Connect: type: object required: - requestorId - requestedId - timestamp - profile - token - contentRevision properties: requestorGuid: type: string requestedGuid: type: string timestamp: type: integer format: int32 profile: $ref: '#/components/schemas/Profile' token: type: string contentRevision: type: integer format: int64 Disconnect: type: object required: - requestorId - requestedId - timestamp properties: requestorId: type: string requestedId: type: string timestamp: type: integer format: int32 DataMessage: type: object required: - message - messageType - keyType - publicKey - signature properties: messageType: type: string enum: [Connect, Disconnect, Profile, Authenticate] message: type: string format: base64 encoded object keyType: type: string enum: [RSA4096, RSA2048] publicKey: type: string format: base64 encoding of account key signature: type: string format: base64 encoding of message signature securitySchemes: basicAuth: type: http scheme: basic bearerAuth: type: http scheme: bearer