databag/doc/api.oa3
2024-06-05 18:41:42 -07:00

5001 lines
128 KiB
Plaintext

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: 1.0.5
title: DataBag
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
tags:
- name: status
description: websocket endpoint for receiving module events
- name: admin
description: account creation for portal backend.
- name: account
description: account configuration for portal backend. supports app attachment
- name: authorize
description: authorize holder of identity for external service
- name: profile
description: getting and setting of the public profile
- name: alias
description: group management for contenting attributes
- name: contact
description: card management for referencing contacts
- name: attribute
description: article management associated with profile
- name: call
description: coordination of webrtc communication
paths:
/status:
get:
tags:
- status
description: Websocket endpoint for receiving account status updates
operationId: status
responses:
'200':
description: Awaiting announce
/status/activity:
get:
tags:
- status
description: Websocket endpoint for receiving account status and calling events
operationId: activity
responses:
'200':
description: Awaiting announce
/admin/status:
get:
tags:
- admin
description: Check if portal params have been set
operationId: get-node-status
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'500':
description: internal server error
put:
tags:
- admin
description: Set admin password and node domain
operationId: set-node-status
security:
- basicCredentials: []
parameters:
- name: domain
in: query
description: domain of node
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'500':
description: internal server error
/admin/access:
put:
tags:
- admin
description: Acquire new session token for admin endpoints
operationId: set-admin-session
parameters:
- name: token
in: query
description: access token
required: true
schema:
type: string
- name: code
in: query
description: totp code
required: false
schema:
type: string
responses:
'201':
description: generated
content:
application/json:
schema:
type: string
'401':
description: invalid token
'405':
description: totp code required but not set
'429':
description: temporarily locked due to too many failures
'500':
description: internal server error
/admin/mfauth:
get:
tags:
- admin
description: check if multi-factor authentication enabled
operationId: get-admin-mfa
parameters:
- name: token
in: query
description: session token
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'401':
description: permission denied
'500':
description: internal server error
post:
tags:
- admin
description: Enable multi-factor authentication
operationId: add-admin-mfa
parameters:
- name: token
in: query
description: session token
required: true
schema:
type: string
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: permission denied
'500':
description: internal server error
put:
tags:
- admin
description: Confirm multi-factor authentication
operationId: confirm-admin-mfa
parameters:
- name: token
in: query
description: session token
required: false
schema:
type: string
- name: code
in: query
description: totp code generated from secret
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'403':
description: totp code not correct
'405':
description: totp code required but not set
'429':
description: temporarily locked due to too many failures
'500':
description: internal server error
delete:
tags:
- admin
description: Disable multi-factor authentication
operationId: remove-admin-mfa
parameters:
- name: token
in: query
description: session token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'500':
description: internal server error
/admin/config:
get:
tags:
- admin
description: Get node configuration. Access granted to admin username and password.
operationId: get-node-config
parameters:
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/NodeConfig'
'401':
description: permission denied
'500':
description: internal server error
put:
tags:
- admin
description: Set node config. Access granted to admin username and password.
operationId: set-node-config
parameters:
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
- name: setOpenAccess
in: query
description: if open access should be updated
required: false
schema:
type: boolean
responses:
'200':
description: success
'401':
description: permission denide
'500':
description: internal server error
/admin/accounts:
get:
tags:
- admin
description: Get list of accounts hosted on node. Access granted to admin username and password.
operationId: get-node-accounts
parameters:
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AccountProfile'
'401':
description: invalid password
'404':
description: handle not found
'500':
description: internal server error
post:
tags:
- admin
description: Gernerate a url for creating a new account. Access granted to admin username and password.
operationId: add-node-account
parameters:
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: invalid password
'500':
description: internal server error
/admin/accounts/{accountId}/image:
get:
tags:
- admin
description: Get profile image of node account.
operationId: get-node-account-image
parameters:
- name: accountId
in: path
description: id of account to delete
required: true
schema:
type: string
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/octet-stream: # content specific
schema:
type: string
format: binary
'401':
description: invalid authentication
'404':
description: account not found
'500':
description: internal server error
/admin/accounts/{accountId}:
delete:
tags:
- admin
description: Remove account from node. Access granted to admin token
operationId: remove-node-account
parameters:
- name: accountId
in: path
description: id of account to delete
required: true
schema:
type: string
- name: token
in: query
description: session token for admin access
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/{accountId}/auth:
post:
tags:
- account
description: Generate token to reset authentication.
operationId: add-account-authentication
parameters:
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
- name: accountId
in: path
description: specified account
required: true
schema:
type: string
responses:
'201':
description: generated
content:
application/json:
schema:
type: string
'401':
description: invalid password
'500':
description: internal server error
/admin/accounts/{accountId}/status:
put:
tags:
- admin
description: Disable account. Access granted to admin token
operationId: set-node-account
parameters:
- name: accountId
in: path
description: id of account to delete
required: true
schema:
type: string
- name: token
in: query
description: session token for admin access
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: boolean
'401':
description: invalid authentication
'404':
description: account not found
'500':
description: internal server error
/admin/accounts/import:
post:
tags:
- admin
description: Import an account account from a backup archive. Access granted to the admin username and password.
operationId: import account
security:
- basicAuth: []
responses:
'201':
description: success
'401':
description: permission denied
'406':
description: account already imported
'500':
description: internal server error
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
fileName:
type: string
format: binary
/account/available:
get:
tags:
- account
description: Check if any public accounts are available
operationId: get-account-available
responses:
'200':
description: available public accounts
content:
application/json:
schema:
type: integer
format: uint32
'500':
description: internal server error
/account/username:
get:
tags:
- account
description: Check if username is available. Access granted account reset token or account create token.
operationId: get-account-username
security:
- bearerAuth: []
parameters:
- name: name
in: query
description: username to check
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'401':
description: permission denied
'500':
description: internal server error
/account/flag/{guid}:
get:
tags:
- account
description: Report record for admin review.
operationId: add-flag
parameters:
- name: guid
in: path
description: guid of account holder
required: true
schema:
type: string
- name: channel
in: query
description: channel of or reported record
required: false
schema:
type: string
- name: topic
in: query
description: topic id of reported record
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Profile'
'401':
description: permission denied
'500':
description: internal server error
/account/listing:
get:
tags:
- account
description: Get profile of searchable accounts. Endpoint is publically accessible.
operationId: get-account-listing
parameters:
- name: filter
in: query
description: filter handles by text
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Profile'
'401':
description: permission denied
'500':
description: internal server error
/account/listing/{guid}/image:
get:
tags:
- account
description: Get profile image of searchable accounts. Endpoint is publically accessible.
operationId: get-account-listing-image
parameters:
- name: guid
in: path
description: filter for specified guid
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/octet-stream: # content specific
schema:
type: string
format: binary
'401':
description: permission denied
'500':
description: internal server error
/account/listing/{guid}/message:
get:
tags:
- account
description: Get profile message of searchable account. Endpoint is publically accessible.
operationId: get-account-listing-message
parameters:
- name: guid
in: path
description: filter for specified guid
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'500':
description: internal server error
/account/token:
get:
tags:
- account
description: Check if account reset token or account create token is valid. Access granted to valid create or reset token.
operationId: get-account-token
security:
- bearerAuth: []
responses:
'200':
description: success
content:
application/json:
schema:
type: string
'401':
description: permission denied
'500':
description: internal server error
/account/status:
get:
tags:
- account
description: Get disabled status of account. Authorized to account username and password.
operationId: get-account-status
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/AccountStatus'
'401':
description: authentication error
'500':
description: internal server error
/account/notification:
put:
tags:
- account
description: Set whether account should receive push notifications.
operationId: set-account-notification
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: deviceToken
in: query
description: deviceToken for push notification
required: false
schema:
type: string
- name: webEndpoint
in: query
description: webpush endpoint
required: false
schema:
type: string
- name: webPublicKey
in: query
description: webpush public key
required: false
schema:
type: string
- name: webAuth
in: query
description: webpush authorization
required: false
schema:
type: string
- name: pushType
in: query
description: unifiedpush (up) or firebase (fcm), or webpush (web)
required: false
schema:
type: string
responses:
'201':
description: success
'401':
description: permission denied
'405':
description: failed to confirm
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: boolean
/account/seal:
put:
tags:
- account
description: Set sealing key for account.
operationId: set-account-seal
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'201':
description: success
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Seal'
/account/searchable:
put:
tags:
- account
description: Set whether account is publicly listed.
operationId: set-account-seachable
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'201':
description: success
'401':
description: permission denied
'405':
description: failed to confirm
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: boolean
/account/mfauth:
post:
tags:
- account
description: Enable multi-factor authentication
operationId: add-mfa
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: permission denied
'500':
description: internal server error
put:
tags:
- account
description: Confirm multi-factor authentication
operationId: confirm-mfa
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: code
in: query
description: totp code generated from secret
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'403':
description: totp code not correct
'405':
description: totp code required but not set
'429':
description: temporarily locked due to too many failures
'500':
description: internal server error
delete:
tags:
- account
description: Disable multi-factor authentication
operationId: remove-mfa
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'500':
description: internal server error
/account/login:
put:
tags:
- account
description: Reset account login credentials
operationId: set-account-login
security:
- basicAuth: []
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: invalid password
'404':
description: unknown portal
'500':
description: internal server error
/account/profile:
post:
tags:
- account
description: Add a new account. Basic auth will be used for the accounts username and password. Access granted to valid create account token.
operationId: add-account
security:
- bearerAuth: []
- basicCredentials: []
responses:
'201':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
'400':
description: invalid handle or password
'401':
description: permission denied
'500':
description: internal server error
delete:
tags:
- account
description: Delete account. Access granted to valid create account token.
operationId: remove-account
security:
- basicAuth: []
responses:
'201':
description: successful operation
'401':
description: permission denied
'500':
description: internal server error
/account/assets/{assetId}:
get:
tags:
- account
description: Get asset assigned to an account. The endpoint supports byte-range requests and responds with the content-type set appropriatly. Access granted to the app tokens of the account holder and in the case of non-original assets, the contact token for accounts with which the article is shared.
operationId: get-account-asset
security:
- basicAuth: []
parameters:
- 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 or article not found
'500':
description: internal server error
/account/auth:
put:
tags:
- account
description: Apply account reset token to set handle and password. Basic auth will be used for new login and password. Access granted to valid reset token.
operationId: set-account-authentication
security:
- bearerAuth: []
- basicAuth: []
responses:
'201':
description: success
'401':
description: permission denied
'500':
description: internal server error
/account/access:
put:
tags:
- account
description: Apply reset token to acquire app token for access.
operationId: set-account-access
parameters:
- name: token
in: query
description: access token for connecting to accounts
required: false
schema:
type: string
- name: appName
in: query
description: name of connecting app
required: false
schema:
type: string
- name: appVersion
in: query
description: version of connecting app
required: false
schema:
type: string
- name: platform
in: query
description: device platform
required: false
schema:
type: string
- name: deviceToken
in: query
description: deviceToken for push notification
required: false
schema:
type: string
- name: notifications
in: query
description: push notifications to receive
required: false
schema:
type: array
items:
type: string
responses:
'201':
description: generated
content:
application/json:
schema:
$ref: '#/components/schemas/LoginAccess'
'401':
description: permission denied
'500':
description: internal server error
/account/node:
put:
tags:
- account
description: Set forwarding address after export/import has completed. Access granted to valid reset token.
operationId: set-account-node
security:
- basicAuth: []
responses:
'201':
description: success
'401':
description: permission denied
'405':
description: failed to confirm
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/account/apps:
get:
tags:
- account
description: Get list of attached apps to account. Access granted to account's username and password.
operationId: get-account-apps
security:
- basicAuth: []
responses:
'200':
description: success
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/App'
'401':
description: permission denied
'500':
description: internal server error
post:
tags:
- account
description: Generate token to attach an app to the account. Access granted to account's username and password.
operationId: add-account-app
security:
- basicAuth: []
parameters:
- name: code
in: query
description: totp code
required: false
schema:
type: string
- name: appName
in: query
description: name of connecting app
required: false
schema:
type: string
- name: appVersion
in: query
description: version of connecting app
required: false
schema:
type: string
- name: platform
in: query
description: device platform
required: false
schema:
type: string
- name: deviceToken
in: query
description: deviceToken for push notification
required: false
schema:
type: string
- name: pushType
in: query
description: unifiedpush (up) or firebase (fcm), default fcm
required: false
schema:
type: string
- name: notifications
in: query
description: push notifications to receive
required: false
schema:
type: array
items:
type: string
responses:
'201':
description: generated
content:
application/json:
schema:
$ref: '#/components/schemas/LoginAccess'
'401':
description: invalid token
'406':
description: app limit reached
'405':
description: totp code required but not set
'410':
description: account disabled
'429':
description: temporarily locked due to too many failures
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AppData'
delete:
tags:
- account
description: Remove an app entry to achieve logout. Access granted to agent token.
operationId: remove-agent-token
parameters:
- name: agent
in: query
description: agent token for account access
required: true
schema:
type: string
- name: all
in: query
description: whether all app tokens should be cleared
required: false
schema:
type: boolean
responses:
'200':
description: ok
'401':
description: invalid token
'410':
description: account disabled
'500':
description: internal server error
/account/apps/{appId}:
delete:
tags:
- account
description: Get list of attached apps. Access granted to account's username and password.
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
'410':
description: account disabled
'500':
description: internal server error
/account/export:
put:
tags:
- account
description: Export account from node. Account is automatically disabled afterwards. Authorized to account username and password.
operationId: set-account-export
security:
- basicAuth: []
responses:
'201':
description: success
'401':
description: permission denied
'500':
description: internal server error
/authorize:
put:
tags:
- authorize
description: Retrieve an authenticate data messaging verifying the account holder is accepting the action referenced by the token.
operationId: authorize
security:
- bearerAuth: []
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/profile:
get:
tags:
- profile
description: Get profile of accunt. Access granted to app token of account holder.
operationId: get-profile
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- profile
description: Delete own account.
operationId: remove-profile
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'500':
description: internal server error
/profile/data:
put:
tags:
- profile
description: Set profile data. Access granted to app tokens of account holder.
operationId: set-profile
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileData'
/profile/image:
get:
tags:
- profile
description: Download base64 decoded data of profile image. Access granted to app tokens of account holder.
operationId: get-profile-image
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/octet-stream: # content specific
schema:
type: string
format: binary
'401':
description: permission denied
'405':
description: invalid image
'410':
description: account disabled
'500':
description: internal server error
put:
tags:
- profile
description: Set base64 encode image data for profile. Access granted to app tokens of account holder.
operationId: set-profile-image
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
'401':
description: permission denied
'405':
description: invalid image
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/profile/message:
get:
tags:
- profile
description: Get a profile data message. Access granted to app token of account holder or contact token of connected contact.
operationId: get-profile-message
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
/alias/groups:
get:
tags:
- alias
description: Get groups for sharing. Access granted to app tokens of the account holder.
operationId: get-groups
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
headers:
X-Group-Revision:
schema:
type: integer
format: int64
description: current group revision
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Group'
'401':
description: invalid token
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- alias
description: Add a group for sharing. Access granted to app tokens of account holder.
operationId: add-group
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/alias/groups/{groupId}/subject/{field}:
get:
tags:
- alias
description: Base64 decode and download specified field from the groups's subject. Access granted to app token of account holder.
operationId: get-group-subject-field
parameters:
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
- name: field
in: path
description: field from subject to base64 decode and download
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: field, article not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/alias/groups/{groupId}/subject:
put:
tags:
- alias
description: Update group description for sharing. Access granted to app tokens of account holder.
operationId: set-group-subject
parameters:
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
'401':
description: permission denied
'404':
description: group not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
delete:
tags:
- alias
description: Remove sharing group
operationId: remove-group
parameters:
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: group not found
'410':
description: account disabled
'500':
description: internal server error
/contact/cards:
get:
tags:
- contact
description: Get list of cards. Access granted to app tokens of account holder.
operationId: get-cards
parameters:
- name: revision
in: query
description: only return updated cards since specified revision
required: false
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
headers:
X-Card-Revision:
schema:
type: integer
format: int64
description: current card revision
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Card'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- contact
description: Add a contact card. Access granted to app tokens of account holder.
operationId: add-card
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'400':
description: invalid data message
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
/contact/cards/{cardId}:
get:
tags:
- contact
description: Get specified card. Access granted to app tokens of account holder.
operationId: get-card
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Card'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- contact
description: Remove card entry. Access granted to app tokens of account holder.
operationId: remove-card
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
/contact/cards/{cardId}/status:
put:
tags:
- contact
description: Updated connected status of contact. Access granted to app tokens of account holder.
operationId: set-card-status
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: token
in: query
description: token for accessing card
required: false # required for connected
schema:
type: string
- name: profileRevision
in: query
description: profile revision of contact
required: false # required for connected
schema:
type: string
- name: articleRevision
in: query
description: article revision of contact
required: false # required for connected
schema:
type: string
- name: channelRevision
in: query
description: channel revision of contact
required: false # required for connected
schema:
type: string
- name: viewRevision
in: query
description: view revision of contact
required: false # required for connected
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'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 connecting to other contacts. Access granted to app tokens for account holder.
operationId: get-open-message
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
/contact/openMessage:
put:
tags:
- contact
description: Set message for connecting to a contact. If card has not already been added, the card will be created in the pending state. Access granted to public.
operationId: set-open-message
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ContactStatus'
'400':
description: invalid data message
'410':
description: account disabled
'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 connection with contact. Access granted to app tokens for account holder.
operationId: get-close-message
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
/contact/closeMessage:
put:
tags:
- contact
description: Set message for closing card connection. Access granted to public.
operationId: set-close-message
responses:
'200':
description: successful operation
'400':
description: invalid data message
'410':
description: account disabled
'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. Access granted to app tokens of account holder.
operationId: get-card-profile
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/CardProfile'
'401':
description: permission denied
'404':
description: not found
'410':
description: account disabled
'500':
description: internal server error
put:
tags:
- contact
description: Set profile of card entry. Access granted to app tokens of account holder.
operationId: set-card-profile
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/DataMessage'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
/contact/cards/{cardId}/profile/image:
get:
tags:
- contact
description: Get image of card profile. Access granted to app tokens of account holder.
operationId: get-card-profile-image
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/octet-stream: #asset specific
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: card not found
'405':
description: invalid image
'410':
description: account disabled
'500':
description: internal server error
/contact/cards/{cardId}/detail:
get:
tags:
- contact
description: Get specified card detail. Access granted to app tokens for account holder.
operationId: get-card-detail
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
/contact/cards/{cardId}/notes:
put:
tags:
- contact
description: Update card notes for specified card. Access granted to app tokens for account holder.
operationId: set-card-notes
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
delete:
tags:
- contact
description: Clear notes for specified card. Access granted to app tokens of account holder.
operationId: clear-card-notes
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card not found
'410':
description: account disabled
'500':
description: internal server error
/contact/cards/{cardId}/groups/{groupId}:
put:
tags:
- contact
description: Set sharing group for contact. Access granted to app tokens for account holder.
operationId: set-card-group
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- contact
description: Clear sharing group for card. Access granted to app tokens for account holder.
operationId: clear-card-group
parameters:
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
- name: groupId
in: path
description: specified share id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetail'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
/contact/profile/revision:
put:
tags:
- contact
description: Set profile revision for contact. This is intend to be invoked automatically anytime a contact updates their profile. Access granted to contact tokens.
operationId: set-profile-revision
parameters:
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: revision set
'401':
description: not authorized
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: integer
format: int64
/contact/article/revision:
put:
tags:
- contact
description: Set artcile revision for contact. This is intend to be invoked automatically anytime a contact updates their content or sharing. Access granted to contact tokens.
operationId: set-article-revision
parameters:
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: revision set
'401':
description: not authorized
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: integer
format: int64
/contact/channel/revision:
put:
tags:
- contact
description: Set channel revision for contact. This is intend to be invoked automatically anytime a contact updates their content or sharing. Access granted to contact tokens.
operationId: set-channel-revision
parameters:
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: revision set
'401':
description: not authorized
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: integer
format: int64
/contact/view/revision:
put:
tags:
- contact
description: Set view revision for contact. This is intend to be invoked automatically anytime a contact updates their content or sharing. Access granted to contact tokens.
operationId: set-view-revision
parameters:
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: revision set
'401':
description: not authorized
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: integer
format: int64
/contact/notification:
post:
tags:
- contact
description: Inform contact of a push notification event
operationId: set-push-event
parameters:
- name: contact
in: query
description: contact token
required: true
schema:
type: string
responses:
'200':
description: event set
'401':
description: not authorized
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/attribute/articles:
get:
tags:
- attribute
description: Get article slots that should be updated based on revisions. Access granted to account token or contact token. When the request is made with a contact token the account view revision will be added to the block revision.
operationId: get-articles
security:
- bearerAuth: []
parameters:
- name: viewRevision
in: query
description: view revision from which attribute revision applies
required: false
schema:
type: string
- name: articleRevision
in: query
description: return updated articles since revision
required: false
schema:
type: string
- name: types
in: query
description: return only articles of specified types
required: false
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: successful operation
headers:
X-View-Revision:
schema:
type: integer
format: int64
description: current view revision
X-Article-Revision:
schema:
type: integer
format: int64
description: current article revision
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- attribute
description: Add a content article. Access granted to app token of the account holder.
operationId: add-article
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'201':
description: entry created
content:
application/json:
schema:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/attribute/articles/{articleId}:
delete:
tags:
- attribute
description: Remove specified article. Access granted to app token of account holder.
operationId: remove-article
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: invalid password
'404':
description: article not found
'410':
description: account disabled
'500':
description: internal server error
/attribute/articles/{articleId}/subject/{field}:
get:
tags:
- attribute
description: Base64 decode and download specified field from the article's subject. Access granted to app token of account holder or contact token of account the article is shared with.
operationId: get-article-subject-field
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: field
in: path
description: field from subject to base64 decode and download
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: contact
in: query
description: contact token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: field, article not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/attribute/articles/{articleId}/subject:
put:
tags:
- attribute
description: Set subject for article. Access granted to app token of account holder.
operationId: set-article-subject
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: article not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/attribute/articles/{articleId}/groups/{groupId}:
put:
tags:
- attribute
description: Set group for articles. Access granted to app tokens for account holder.
operationId: set-article-group
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- attribute
description: Clear sharing group for article. Access granted to app tokens for account holder.
operationId: clear-article-group
parameters:
- name: articleId
in: path
description: specified card id
required: true
schema:
type: string
- name: groupId
in: path
description: specified share id
required: true
schema:
type: string
- name: agent
in: query
description: agent token
required: false
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels:
get:
tags:
- content
description: Get channel slots. If revision set detail fields omittied in response
operationId: get-channels
security:
- bearerAuth: []
parameters:
- name: viewRevision
in: query
description: view revision from which content revision applies
required: false
schema:
type: string
- name: channelRevision
in: query
description: return updated channels since revision
required: false
schema:
type: string
- name: types
in: query
description: return only channels of specified types
required: false
schema:
type: string
responses:
'200':
description: successful operation
headers:
X-View-Revision:
schema:
type: integer
format: int64
description: current view revision
X-Channel-Revision:
schema:
type: integer
format: int64
description: current channel revision
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add a channel.
operationId: add-channel
security:
- bearerAuth: []
responses:
'201':
description: entry created
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ChannelParams'
/content/channels/{channelId}/detail:
get:
tags:
- content
description: Get details of channel.
operationId: get-channel-detail
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/ChannelDetail'
'401':
description: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/summary:
get:
tags:
- content
description: Get summary of channel.
operationId: get-channel-summary
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/ChannelSummary'
'401':
description: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}:
delete:
tags:
- content
description: Remove specified channel or membership. When invoked by account holder, channel is removed. When invoked by member, membership is removed.
operationId: remove-channel
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/notification:
get:
tags:
- content
description: Get notification enabled state for the specified channel
operationId: get-channel-notifications
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: agent
in: query
description: access token granted to agent
required: true
schema:
type: string
- name: contact
in: query
description: access token granted to contact
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'401':
description: permission denied
'404':
description: field, channel not found
'410':
description: account disabled
'500':
description: internal server error
put:
tags:
- content
description: Set notification enabled state for the specified channel
operationId: set-channel-notifications
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: agent
in: query
description: access token granted to agent
required: true
schema:
type: string
- name: contact
in: query
description: access token granted to contact
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: field, channel not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: boolean
/content/channels/{channelId}/subject/{field}:
get:
tags:
- content
description: Base64 decode and download specified field from the channel's subject. Access granted to app token of account holder or contact token of account the channel is shared with.
operationId: get-channel-subject-field
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: field
in: path
description: field from subject to base64 decode and download
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: field, channel not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/subject:
put:
tags:
- content
description: Set subject for channel. Access granted to app token of account holder.
operationId: set-channel-subject
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/content/channels/{channelId}/groups/{groupId}:
put:
tags:
- content
description: Set group for read access to channel. Access granted to app tokens for account holder.
operationId: set-channel-group
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: groupId
in: path
description: specified group id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Clear read access to channel for group. Access granted to app tokens for account holder.
operationId: clear-channel-group
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified card id
required: true
schema:
type: string
- name: groupId
in: path
description: specified share id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/cards/{cardId}:
put:
tags:
- content
description: Set card for write access to channel. Access granted to app tokens for account holder.
operationId: set-channel-card
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Clear write access to channel for card. Access granted to app tokens for account holder.
operationId: clear-channel-card
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: cardId
in: path
description: specified card id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Channel'
'401':
description: permission denied
'404':
description: card or group not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics:
get:
tags:
- content
description: Get channel topic slots. If revision set, detail fields omitted in response. Staggered loading supported through sequnce marker. Initially count can be used to limit the topics returned. The sequence marker returned in the header must be used in subsequent queries for the same topic window.
operationId: get-channel-topics
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: revision
in: query
description: return updated topics since revision
required: false
schema:
type: integer
format: int64
- name: count
in: query
description: limit number of topics from latest when revision not set
required: false
schema:
type: integer
format: int64
- name: begin
in: query
description: return topics after and including sequence marker
required: false
schema:
type: integer
format: int64
- name: end
in: query
description: return topics before and not including sequence marker
required: false
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
headers:
Topic-Revision:
schema:
type: integer
format: int64
description: current topic revision
Topic-Marker:
schema:
type: integer
format: int64
description: sequnce marker of first topic when count set
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Topic'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add a topic to channel channel.
operationId: add-channel-topic
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: confirm
in: query
description: set if intial state is confirmed
required: false
schema:
type: boolean
responses:
'201':
description: entry created
content:
application/json:
schema:
$ref: '#/components/schemas/Topic'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/content/channels/{channelId}/topics/{topicId}:
delete:
tags:
- content
description: Remove specified channel. Access granted to app token of account holder.
operationId: remove-channel-topic
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/detail:
get:
tags:
- content
description: Get detail object of topic.
operationId: get-channel-topic-detail
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: topicId
in: path
description: specified topic id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/TopicDetail'
'401':
description: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/subject/{field}:
get:
tags:
- content
description: Base64 decode and download specified field from the channel's subject. Access granted to app token of account holder or contact token of account the channel is shared with.
operationId: get-channel-topic-subject-field
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: topicId
in: path
description: specified topic id
required: true
schema:
type: string
- name: field
in: path
description: field from subject to base64 decode and download
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: field, channel not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/subject:
put:
tags:
- content
description: Set subject for channel. Access granted to app token of account holder.
operationId: set-channel-topic-subject
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: topicId
in: path
description: specified topic id
required: true
schema:
type: string
- name: confirm
in: query
description: confirmed state of topic
required: false
schema:
type: boolean
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/content/channels/{channelId}/topics/{topicId}/assets:
get:
tags:
- content
description: Get list of assets assigned to an channel. The original assets will only be available to the account holder to provent the accidental sharing of content metadata. Access is granted to the app token of the account holder and the contact token of accounts the channel has been shared with.
operationId: get-channel-topic-assets
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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: array
items:
$ref: '#/components/schemas/Asset'
'401':
description: invalid token
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add an an asset to the to an channel. The original posted asset is referenced in the asset list with a null transform. The transformed assets are referenced accordingly. Transforming the asset strips it of metadata and transcodes it into a specified format. Access is granted to the app token of the account holder.
operationId: add-channel-topic-asset
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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:
type: array
items:
$ref: '#/components/schemas/Asset'
'401':
description: permission denied
'404':
description: channel not found
'406':
description: storage limit reached
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
fileName:
type: string
format: binary
/content/channels/{channelId}/topics/{topicId}/blocks:
post:
tags:
- content
description: Add a asset to the channel. Payload is a file block encoded as bas64 string. This is to support e2e as the client side will encrypt the file block before applying the base64 encoding.
operationId: add-channel-topic-block
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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: channel not found
'406':
description: storage limit reached
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/content/channels/{channelId}/topics/{topicId}/assets/{assetId}:
get:
tags:
- content
description: Get asset assigned to an channel. The endpoint supports byte-range requests and responds with the content-type set appropriatly. Access granted to the app tokens of the account holder and in the case of non-original assets, the contact token for accounts with which the channel is shared.
operationId: get-channel-topic-asset
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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 or channel not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove an asset from an channel. Access granted to app tokens of the account holder.
operationId: remove-channel-topic-asset
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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
'404':
description: asset or channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/confirmed:
put:
tags:
- content
description: Set confirmed state of the channel. Until the confirmed state has been set to true, the channel will not be visible to contacts with which the channel is shared. Access granted to the app tokens of the acocunt holder.
operationId: set-channel-topic-confirmed
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/content/channels/{channelId}/topics/{topicId}/tags:
get:
tags:
- content
description: Get channel topic tag slots.
operationId: get-channel-topic-tags
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
- name: topicId
in: path
description: specified topic id
required: true
schema:
type: string
- name: revision
in: query
description: return updated topics since revision
required: false
schema:
type: integer
format: int64
- name: count
in: query
description: limit number of latest from latest when revision not set
required: false
schema:
type: integer
format: int64
- name: begin
in: query
description: return tags after and including sequence marker
required: false
schema:
type: integer
format: int64
- name: end
in: query
description: return tags before and not including sequence marker
required: false
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
headers:
Tag-Revision:
schema:
type: integer
format: int64
description: current tag revision
Tag-Marker:
schema:
type: integer
format: int64
description: sequnce marker of first tag when count set
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tag'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add a tag to channel topic.
operationId: add-channel-topic-tag
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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:
$ref: '#/components/schemas/Tag'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/content/channels/{channelId}/topics/{topicId}/tags/{tagId}:
delete:
tags:
- content
description: Remove specified tag from channel topic. Access granted to app token of account holder.
operationId: remove-channel-topic-tag
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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: invalid password
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/tags/{tagId}/subject/{field}:
get:
tags:
- content
description: Base64 decode and download specified field from the channel's subject. Access granted to app token of account holder or contact token of account the channel is shared with.
operationId: get-channel-topic-tag-subject-field
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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
- name: field
in: path
description: field from subject to base64 decode and download
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: field, channel not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/topics/{topicId}/tags/{tagId}/subject:
put:
tags:
- content
description: Set subject for channel. Access granted to app token of account holder.
operationId: set-channel-topic-tag-subject
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified channel 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
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
/talk/calls:
post:
tags:
- talk
description: Add new call entry
operationId: add-call
parameters:
- name: agent
in: query
description: agent token
required: true
schema:
type: string
- name: cardId
in: query
description: id of card to call
required: true
schema:
type: string
responses:
'201':
description: entry created
content:
application/json:
schema:
$ref: '#/components/schemas/Call'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
type: string
/talk/calls/{callId}:
put:
tags:
- talk
description: extend keep alive on specified call
operationId: keep-call
parameters:
- name: agent
in: query
description: agent token
required: true
schema:
type: string
- name: callId
in: path
description: id of call to keep alive
required: true
schema:
type: string
responses:
'200':
description: successful operation
'401':
description: permission denied
'404':
description: call not found
'406':
description: call has already expired or closed
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- talk
description: terminte sepecified call
operationId: end-call
parameters:
- name: agent
in: query
description: agent token
required: false
schema:
type: string
- name: contact
in: query
description: contact token
required: false
schema:
type: string
- name: callId
in: path
description: id of call to end
required: true
schema:
type: string
responses:
'200':
description: successful operation
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
/talk/ring:
post:
tags:
- talk
description: Create a ring event in contact
operationId: add-ring
parameters:
- name: contact
in: query
description: contact token
required: true
schema:
type: string
- name: calleeToken
in: query
description: token for the contact to connect with
required: true
schema:
type: string
- name: index
in: query
description: index of current ring
required: true
schema:
type: integer
format: int32
responses:
'201':
description: entry created
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Ring'
/talk/signal:
get:
tags:
- talk
description: Websocket endpoint for coordinating webrtc conversation
operationId: signal
responses:
'200':
description: Awaiting token
externalDocs:
description: App overview
url: ''
components:
schemas:
Announce:
type: object
required:
- appToken
properties:
appToken:
type: string
LoginAccess:
type: object
required:
- guid
- appToken
- created
- pushSupported
properties:
guid:
type: string
appToken:
type: string
created:
type: integer
format: int64
pushSupported:
type: boolean
Revision:
type: object
required:
- profile
- article
- group
- channel
- card
properties:
account:
type: integer
format: int64
profile:
type: integer
format: int64
article:
type: integer
format: int64
group:
type: integer
format: int64
channel:
type: integer
format: int64
card:
type: integer
format: int64
NodeConfig:
type: object
required:
- domain
- accountStorage
properties:
domain:
type: string
accountStorage:
type: integer
format: int64
enableImage:
type: boolean
enableAudio:
type: boolean
enableVideo:
type: boolean
keyType:
type: string
pushSupported:
type: boolean
allowUnsealed:
type: boolean
transformSupported:
type: boolean
enableIce:
type: boolean
iceService:
type: string
iceUrl:
type: string
iceUsername:
type: string
icePassword:
type: string
enableOpenAccess:
type: boolean
openAccessLimit:
type: integer
format: int64
Seal:
type: object
required:
- salt
- privateKeyEncrypted
- publicKey
properties:
passwordSalt:
type: string
format: hex encoded data
privateKeyIv:
type: string
format: hex encoded data
privateKeyEncrypted:
type: string
format: base64 encoded data
publicKey:
type: string
format: base64 encoded data
AccountStatus:
type: object
required:
- disabled
- storageUsed
- storageAvailable
- forwardingAddress
- searchable
- pushEnabled
- multiFactorAuth
- webServerKey
properties:
disabled:
type: boolean
storageUsed:
type: integer
format: int64
storageAvailable:
type: integer
format: int64
forwardingAddress:
type: string
searchable:
type: boolean
allowUnsealed:
type: boolean
pushEnabled:
type: boolean
sealable:
type: boolean
seal:
$ref: '#/components/schemas/Seal'
enableIce:
type: boolean
multiFactorAuth:
type: boolean
webPushKey:
type: string
AccountProfile:
type: object
required:
- guid
- revision
- node
properties:
accountId:
type: integer
format: uint32
guid:
type: string
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
imageSet:
type: boolean
disabled:
type: boolean
seal:
type: string
storageUsed:
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
seal:
type: string
format: base64 encoded data
version:
type: string
node:
type: string
ProfileData:
type: object
properties:
name:
type: string
description:
type: string
location:
type: string
Account:
type: object
required:
- accountId
- disabled
properties:
accountId:
type: integer
format: uint32
guid:
type: string
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
imageSet:
type: boolean
disabled:
type: boolean
App:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/AppData'
AppData:
type: object
required:
- attached
properties:
name:
type: string
description:
type: string
url:
type: string
image:
type: string
format: base64 encoded image
attached:
type: integer
format: int64
Card:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/CardData'
CardData:
type: object
required:
- detailRevision
- profileRevision
- notifiedProfile
- notifiedArticle
- notifiedChannel
- notifiedView
properties:
detailRevision:
type: integer
format: int64
profileRevision:
type: integer
format: int64
notifiedProfile:
type: integer
format: int64
notifiedArticle:
type: integer
format: int64
notifiedChannel:
type: integer
format: int64
notifiedView:
type: integer
format: int64
cardDetail:
$ref: '#/components/schemas/CardDetail'
cardProfile:
$ref: '#/components/schemas/CardProfile'
CardProfile:
type: object
required:
- guid
- node
properties:
guid:
type: string
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
imageSet:
type: boolean
version:
type: string
node:
type: string
seal:
type: string
revision:
type: integer
format: int64
CardDetail:
type: object
required:
- status
properties:
status:
type: string
enum: [ pending, confirmed, requested, connecting, connected ]
statusUpdated:
type: integer
format: int64
token:
type: string
notes:
type: string
groups:
type: array
items:
type: string
Group:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/GroupData'
GroupData:
type: object
required:
- dataType
- data
- created
- updated
properties:
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
ChannelParams:
type: object
required:
- dataType
- data
- groups
- cards
properties:
dataType:
type: string
data:
type: string
groups:
type: array
items:
type: string
cards:
type: array
items:
type: string
Channel:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/ChannelData'
ChannelData:
type: object
required:
- detailRevision
- topicRevision
properties:
detailRevision:
type: integer
format: int64
topicRevision:
type: integer
format: int64
channelSummary:
$ref: '#/components/schemas/ChannelSummary'
channelDetail:
$ref: '#/components/schemas/ChannelDetail'
ChannelDetail:
type: object
required:
- dataType
- data
- created
- updated
properties:
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
enableImage:
type: boolean
enableAudio:
type: boolean
enableVideo:
type: boolean
contacts:
$ref: '#/components/schemas/ChannelContacts'
members:
type: array
items:
$ref: '#/components/schemas/ChannelMember'
ChannelSummary:
type: object
properties:
lastTopic:
$ref: '#/components/schemas/TopicDetail'
ChannelContacts:
type: object
required:
- groups
- cards
properties:
groups:
type: array
items:
type: string
cards:
type: array
items:
type: string
ChannelMember:
type: object
required:
- members
properties:
member:
type: string
pushEnabled:
type: boolean
Topic:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/TopicData'
TopicData:
type: object
required:
- detailRevision
- tagRevision
properties:
detailRevision:
type: integer
format: int64
tagRevision:
type: integer
format: int64
topicDetail:
$ref: '#/components/schemas/TopicDetail'
TopicDetail:
type: object
required:
- guid
- dataType
- data
- created
- updated
- status
properties:
guid:
type: string
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
status:
type: string
enum: [ unconfirmed, confirmed ]
transform:
type: string
enum: [ complete, incomplete ]
Tag:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/TagData'
TagData:
type: object
required:
- guid
- dataType
- data
- created
- updated
properties:
guid:
type: string
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
Article:
type: object
required:
- id
- revision
- data
properties:
id:
type: string
revision:
type: integer
format: int64
data:
$ref: '#/components/schemas/ArticleData'
ArticleData:
type: object
required:
- dataType
- data
- created
- updated
- status
properties:
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
status:
type: string
enum: [ unconfirmed, confirmed, incomplete, error ]
groups:
$ref: '#/components/schemas/ArticleGroups'
ArticleGroups:
type: object
required:
- groups
properties:
groups:
type: array
items:
type: string
Asset:
type: object
required:
- assetId
properties:
assetId:
type: string
transform:
type: string
status:
type: string
enum: [ pending, processing, importing, ready, error ]
Subject:
type: object
required:
- dataType
- data
properties:
dataType:
type: string
data:
type: string
Claim:
type: object
required:
- token
properties:
token:
type: string
Identity:
type: object
required:
- revision
- version
- node
properties:
revision:
type: integer
format: int64
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
image:
type: string
format: base64 encoded image
version:
type: string
node:
type: string
seal:
type: string
Connect:
type: object
required:
- contact
- token
properties:
contact:
type: string
token:
type: string
viewRevision:
type: integer
format: int64
articleRevision:
type: integer
format: int64
profileRevision:
type: integer
format: int64
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
image:
type: string
format: base64 encoded image
version:
type: string
seal:
type: string
node:
type: string
Disconnect:
type: object
required:
- contact
properties:
contact:
type: string
SignedData:
type: object
required:
- guid
- timestamp
- messageType
- value
properties:
guid:
type: string
timestamp:
type: integer
format: int64
messageType:
type: string
enum: [Connect, Disconnect, Identity, Authenticate]
value:
type: string
format: json string of Connect, Disconnect, Authenticate, or Profile
ContactStatus:
type: object
required:
- status
properties:
token:
type: string
profileRevision:
type: integer
format: int64
articleRevision:
type: integer
format: int64
channelRevision:
type: integer
format: int64
viewRevision:
type: integer
format: int64
status:
type: string
enum: [ pending, confirmed, requested, connecting, connected ]
DataMessage:
type: object
required:
- message
- keyType
- publicKey
- signature
- signatureType
properties:
message:
type: string
format: base64 encoded json string of SignedData
keyType:
type: string
enum: [RSA4096, RSA2048]
publicKey:
type: string
format: base64 encoding of account public key
signature:
type: string
format: base64 encoding of message signature
signatureType:
type: string
enum: [PKCS1v15, PSS]
Call:
type: object
required:
- id
- cardId
- callerToken
- calleeToken
- keepAlive
properties:
id:
type: string
cardId:
type: string
callerToken:
type: string
calleeToken:
type: string
keepAlive:
type: integer
format: int32
iceService:
type: string
iceUrl:
type: string
iceUsername:
type: string
icePassword:
type: string
IceUrl:
tyle: object
required:
- urls
- username
- credential
properties:
urls:
type: string
username:
type: string
credential:
type: string
Ring:
type: object
required:
- callId
- calleeToken
- index
properties:
callId:
type: string
calleeToken:
type: string
index:
type: integer
format: int32
ice:
type: array
items:
$ref: '#/components/schemas/IceUrl'
iceUrl:
type: string
iceUsername:
type: string
icePassword:
type: string
securitySchemes:
basicAuth:
type: http
scheme: basic
basicCredentials:
type: http
scheme: basic
bearerAuth:
type: http
scheme: bearer