databag/doc/api.oa3
2022-02-07 15:10:04 -08:00

3195 lines
84 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: "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: status
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: authorize
description: authorize holder of identity for external service
- name: profile
description: getting and setting of the public profile
- name: detail
description: attribute management associated with profile
- name: alias
description: group management for showing attributes
- name: content
description: article management for hosted data
- name: contact
description: card management for referencing contacts
- name: share
description: channel management for hosting communication
paths:
# Concetps:
## access tokens for bearer auth:prefix for bearer tokens types
### app: app_
### contact: cnt_
### attach: atc_
### reset: res_
### create: act_
## subject based content provides external definition of datatypes
/status:
get:
tags:
- status
description: Websocket placeholder endpoint for receiving account status updates
operationId: status
responses:
'200':
description: Awaiting announce
/admin/claimable:
get:
tags:
- admin
description: Check if portal params have been set
operationId: get-node-claimable
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'500':
description: internal server error
/admin/claim:
post:
tags:
- admin
description: Set admin password and node domain
operationId: set-node-claim
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/config:
get:
tags:
- admin
description: Get node configuration. Access granted to admin username and password.
operationId: get-node-config
security:
- basicAuth: []
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
security:
- basicAuth: []
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
security:
- basicAuth: []
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Account'
'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
security:
- basicAuth: []
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: invalid password
'500':
description: internal server error
/admin/accounts/{accountId}/reset:
put:
tags:
- admin
description: Generate a password reset url for specified account. Access granted to admin username and password.
operationId: set-node-account
security:
- basicAuth: []
parameters:
- name: accountId
in: path
description: id of profile to access
required: true
schema:
type: string
responses:
'201':
description: success
content:
application/json:
schema:
type: string
'401':
description: invalid password
'404':
description: unknown portal
'500':
description: internal server error
/admin/accounts/{accountId}/image:
get:
tags:
- admin
description: Get profile image of specified account. Access granted to admin username and password
operationId: get-node-account-image
security:
- basicAuth: []
parameters:
- name: accountId
in: path
description: id of specified account
required: true
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
'500':
description: internal server error
/admin/accounts/{accountId}:
delete:
tags:
- admin
description: Remove account from node. Access granted to admin username and password.
operationId: remove-node-account
security:
- basicAuth: []
parameters:
- name: accountId
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/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/public/claimable:
get:
tags:
- account
description: Check if a public account can be created.
operationId: get-public-claimable
responses:
'200':
description: success
content:
application/json:
schema:
type: boolean
'500':
description: internal server error
/account/public/profile:
post:
tags:
- account
description: Add a new account. Basic auth will be used for the accounts username and password. Access granted to when public account available.
operationId: add-public-account
security:
- bearerAuth: []
- basicCredentials: []
responses:
'201':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
'400':
description: invalid handle or password
'406':
description: accounts not available
'500':
description: internal server error
/account/claimable:
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: username
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/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/did:
get:
tags:
- account
description: Retrieve account DIDkey. Authorized to account username and password.
operationId: get-account-did
security:
- basicAuth: []
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: string
'401':
description: authentication error
'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
security:
- basicAuth: []
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/AccountStatus'
'401':
description: authentication error
'500':
description: internal server error
/account/profile:
get:
tags:
- account
description: Get account profile. Access granted to account's username and password.
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. 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/profile/image:
get:
tags:
- account
description: Get profile image. Access granted to account's username and password
operationId: get-account-image
security:
- basicAuth: []
responses:
'200':
description: success
content:
application/octet-stream: # content specific
schema:
type: string
format: binary
'401':
description: permission denied
'405':
description: invalid image
'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:
post:
tags:
- account
description: Generate token to reset authentication. Access granted to account's login and password.
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. 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/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
/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: []
responses:
'201':
description: generated
content:
application/json:
schema:
type: string
'401':
description: invalid password
'410':
description: account disabled
'500':
description: internal server error
put:
tags:
- account
description: Apply the token to attach an app to the account. Access granted to valid attach token.
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
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AppData'
/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
security:
- bearerAuth: []
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
/profile/data:
put:
tags:
- profile
description: Set profile data. Access granted to app tokens of account holder.
operationId: set-profile
security:
- bearerAuth: []
responses:
'200':
description: success
'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
security:
- bearerAuth: []
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
security:
- bearerAuth: []
responses:
'200':
description: success
'401':
description: permission denied
'405':
description: invalid image
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/octet-stream:
schema:
type: string
format: binary
/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
security:
- bearerAuth: []
parameters:
- in: header
name: TokenType
schema:
type: string
enum: [ app, contact ]
required: true
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
/share/groups:
get:
tags:
- share
description: Get groups for sharing. Access granted to app tokens of the account holder.
operationId: get-groups
security:
- bearerAuth: []
responses:
'200':
description: successful operation
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:
- share
description: Add a group for sharing. Access granted to app tokens of account holder.
operationId: add-group
security:
- bearerAuth: []
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'
/share/groups/{groupId}:
put:
tags:
- share
description: Update group description for sharing. Access granted to app tokens of account holder.
operationId: update-group
security:
- bearerAuth: []
parameters:
- name: groupId
in: path
description: specified group id
required: true
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:
- share
description: Remove sharing group
operationId: remove-group
security:
- bearerAuth: []
parameters:
- name: groupId
in: path
description: specified group id
required: true
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
security:
- bearerAuth: []
parameters:
- name: cardRevision
in: query
description: only return updated cards since specified revision
required: false
schema:
type: string
responses:
'200':
description: successful operation
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
security:
- bearerAuth: []
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: Retieve card entry. Permission granted to app tokens for account holder.
operationId: get-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: 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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
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: 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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
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: 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
content:
application/json:
schema:
type: object
required:
- status
properties:
token:
type: string
status:
type: string
enum: [ pending, confirmed, requested, connecting, connected ]
'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
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: 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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card 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: 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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
security:
- bearerAuth: []
parameters:
- name: cardId
in: path
description: specified card id
required: true
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
security:
- bearerAuth: []
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
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
security:
- bearerAuth: []
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
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
security:
- bearerAuth: []
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/content/revision:
put:
tags:
- contact
description: Set content 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-content-revision
security:
- bearerAuth: []
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
security:
- bearerAuth: []
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
/content/articles:
get:
tags:
- content
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: only return updated if view matches
required: false
schema:
type: string
- name: contentRevision
in: query
description: only return updated if view matches
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
type: string
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add a content article. Access granted to app token of the account holder.
operationId: add-article
security:
- bearerAuth: []
responses:
'201':
description: entry created
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleEntry'
'401':
description: permission denied
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleAccess'
/content/articles/{articleId}:
get:
tags:
- content
description: Get specified article. Access granted to app token of account holder or contact token of account the article is shared with.
operationId: get-article
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'404':
description: article not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove specified article. Access granted to app token of account holder.
operationId: remove-article
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
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
/content/articles/{articleId}/subject/{field}:
get:
tags:
- content
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
security:
- bearerAuth: []
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
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Article'
'401':
description: permission denied
'404':
description: field, article not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/subject:
put:
tags:
- content
description: Set subject for article. Access granted to app token of account holder.
operationId: set-article-subject
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
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:
type: object
required:
- type
- data
properties:
type:
type: string
data:
type: string
/content/articles/{articleId}/groups/{groupId}:
post:
tags:
- content
description: Assign a sharing group for the specified article. Contacts with the same sharing group will have access to the article. Access granted to app token of account holder.
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: success
'401':
description: permission denied
'404':
description: group or article not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove article from sharing group. Unless the article is shared through other groups or channels contacts within that group will no longer have access to the article. Access granted to app tokens of the account holder.
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: success
'401':
description: permission denied
'404':
description: group or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/channels/{channelId}:
post:
tags:
- content
description: Assign a channel to an article. If the channel has been assigned a sharing group the article will be accessible by contacts within that group. Access is granted to app tokens of the account holder.
operationId: set-article-channel
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: channel or article not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove a channel from an article. If the channel has been assigned a sharing group the article and the article is not shared in another way, the article will no longer be accessible to that group's contacts. Access is granted to app tokens of the account holder.
operationId: clear-article-channel
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: channelId
in: path
description: specified channel id
required: true
schema:
type: string
responses:
'200':
description: success
'401':
description: permission denied
'404':
description: channel or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/assets:
get:
tags:
- content
description: Get list of assets assigned to an article. 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 article has been shared with.
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
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add an an asset to the to an article. 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-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: success
content:
application/json:
schema:
$ref: '#/components/schemas/Asset'
'401':
description: permission denied
'404':
description: article 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/articles/{articleId}/assets/{assetId}:
get:
tags:
- content
description: Get asset assigned to an article. 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-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: success
content:
application/octet-stream: #asset specific
schema:
type: string
format: binary
'401':
description: permission denied
'404':
description: asset or article not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove an asset from an article. Access granted to app tokens of the account holder.
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: success
'401':
description: permission denied
'404':
description: asset or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/confirmed:
put:
tags:
- content
description: Set confirmed state of the article. Until the confirmed state has been set to true, the article will not be visible to contacts with which the article is shared. Access granted to the app tokens of the acocunt holder.
operationId: set-article-confirmed
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
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:
type: boolean
/content/articles/{articleId}/tagBlocks/view:
get:
tags:
- content
description: Get view of tag blocks associated with specified article. Access granted to app tokens of account holder and contact tokens of account with which the article is shared.
operationId: get-article-tag-block-view
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
- name: types
in: query
description: limit results to tags of types
required: false
schema:
type: array
items:
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: article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/tagBlocks/{blockId}/view:
get:
tags:
- content
description: Get view of tags within speicified block. Access granted to app tokens of account holder and contact token of accounts with which the article is shared.
operationId: get-article-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
- name: types
in: query
description: limit results to tags of types
required: false
schema:
type: array
items:
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: block or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/tagBlocks/{blockId}:
get:
tags:
- content
description: Get tags within specified block. Access granted to app tokens of account holder and contact tokens of accounts with which the article is shared.
operationId: get-article-tags
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
- name: types
in: query
description: limit results to tags of types
required: false
schema:
type: array
items:
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: block or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/tags:
post:
tags:
- content
description: Add a tag to an article. Access granted to app tokens of the account holder and contact tokens of accounts with which the article is shared.
operationId: add-article-tag
security:
- bearerAuth: []
parameters:
- name: articleId
in: path
description: specified article id
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
type: object
properties:
blockId:
type: string
blockRevision:
type: integer
format: int64
tag:
$ref: '#/components/schemas/Tag'
'401':
description: permission denied
'404':
description: article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/tags/{tagId}:
get:
tags:
- content
description: Get specified tag. Access granted to app tokens of account holder and contact tokens of accounts with which the article is shared.
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:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Tag'
'401':
description: permission denied
'404':
description: tag or article not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Remove a tag from an article. Access granted to app tokens of account holder and the contact tokens of the account that created the tag.
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: success
'401':
description: permission denied
'404':
description: tag or article not found
'410':
description: account disabled
'500':
description: internal server error
/content/articles/{articleId}/tags/{tagId}/subject/{field}:
get:
tags:
- content
description: Base64 decode and retrieve specified tag on the article. Access granted to app tokens of account holder and contact tokens of accounts with which the article is shared.
operationId: get-article-tag-subject-field
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
- name: field
in: path
description: field to base64 decode and transfer
required: true
schema:
type: string
responses:
'200':
description: success
content:
application/json:
schema:
$ref: '#/components/schemas/Tag'
'401':
description: permission denied
'404':
description: field, tag or article not found
'405':
description: invalid field
'410':
description: account disabled
'500':
description: internal server error
/content/channels:
get:
tags:
- content
description: Get channels with which to organize the articles. Contacts requesting the channels will only retrieve the channels with which they are shared. Access granted to the app tokens of the account holder and connected contact tokens.
operationId: get-channels
security:
- bearerAuth: []
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Channel'
'401':
description: invalid token
'410':
description: account disabled
'500':
description: internal server error
post:
tags:
- content
description: Add a new channel for organizing the articles. Access granted to the app tokens of the account holder.
operationId: add-channel
security:
- bearerAuth: []
responses:
'200':
description: success
'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}:
put:
tags:
- content
description: Update specified channel. Access granted to app tokens of the account holder.
operationId: update-channel
security:
- bearerAuth: []
parameters:
- name: channelId
in: path
description: specified group id
required: true
schema:
type: string
responses:
'200':
description: successful operation
'401':
description: invalid token
'410':
description: account disabled
'500':
description: internal server error
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Subject'
delete:
tags:
- content
description: Remove specified channel. Access granted the the app tokens of the account holder.
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: permission denied
'404':
description: channel not found
'410':
description: account disabled
'500':
description: internal server error
/content/channels/{channelId}/groups/{groupId}:
post:
tags:
- content
description: Set a sharing group for the channel and articles assigned to the channel. Access granted to app tokens of the 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
'401':
description: permission denied
'404':
description: group or channel not found
'410':
description: account disabled
'500':
description: internal server error
delete:
tags:
- content
description: Clear a sharing group from a channel. Access granted to app tokens of the account holder.
operationId: clear-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
'401':
description: permission denied
'404':
description: group or channel not found
'410':
description: account disabled
'500':
description: internal server error
externalDocs:
description: App overview
url: ''
components:
schemas:
Announce:
type: object
required:
- appToken
properties:
appToken:
type: string
Revision:
type: object
required:
- profile
- attribute
- article
- group
- channel
- card
properties:
profile:
type: integer
format: int64
attribute:
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
- publicLimit
- accountStorage
properties:
domain:
type: string
publicLimit:
type: integer
format: int64
accountStorage:
type: integer
format: int64
AccountStatus:
type: object
required:
- disabled
- storageUsed
- storageAvailable
- forwardingAddress
properties:
disabled:
type: boolean
storageUsed:
type: number
format: int64
storageAvailable:
type: number
format: int64
forwardingAddress:
type: string
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
version:
type: string
node:
type: string
ProfileData:
type: object
properties:
name:
type: string
description:
type: string
location:
type: string
Account:
type: object
required:
- accountId
- profile
- disabled
properties:
accountId:
type: string
profile:
$ref: '#/components/schemas/Profile'
disabled:
type: boolean
App:
type: object
required:
- appId
- appData
- attached
properties:
appId:
type: string
appData:
$ref: '#/components/schemas/AppData'
attached:
type: integer
format: int64
AppData:
type: object
properties:
name:
type: string
description:
type: string
url:
type: string
image:
type: string
format: base64 encoded image
CardProfile:
type: object
required:
- node
properties:
revision:
type: integer
format: int64
handle:
type: string
name:
type: string
description:
type: string
location:
type: string
imageSet:
type: boolean
version:
type: string
node:
type: string
CardDetail:
type: object
required:
- revision
properties:
revision:
type: integer
format: int64
notes:
type: string
groups:
type: array
items:
type: string
Card:
type: object
required:
- cardId
- revision
- cardData
properties:
cardId:
type: string
revision:
type: number
format: int64
cardData:
$ref: '#/components/schemas/CardData'
CardData:
type: object
required:
- guid
- status
- token
- detailRevision
- profileRevision
- notifiedProfile
- notifiedContent
- notifiedChannel
- notifiedView
properties:
guid:
type: string
status:
type: string
enum: [ pending, confirmed, requested, connecting, connected ]
token:
type: string
detailRevision:
type: integer
format: int64
profileRevision:
type: integer
format: int64
notifiedProfile:
type: integer
format: int64
notifiedContent:
type: integer
format: int64
notifiedChannel:
type: integer
format: int64
notifiedView:
type: integer
format: int64
Asset:
type: object
required:
- assetId
properties:
assetId:
type: string
transform:
type: string
status:
type: string
enum: [ pending, processing, ready, error ]
ArticleAccess:
type: object
required:
- channels
- groups
properties:
channels:
type: array
items:
type: string
groups:
type: array
items:
type: string
ArticleEntry:
type: object
required:
- articleBlockId
- article
properties:
articleBlockId:
type: string
article:
$ref: '#/components/schemas/Article'
Group:
type: object
required:
- groupId
- revision
- groupData
properties:
groupId:
type: string
revision:
type: integer
format: int64
groupData:
$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
Channel:
type: object
required:
- channelId
- revision
- channelData
properties:
channelId:
type: string
revision:
type: string
channelData:
$ref: '#/components/schemas/ChannelData'
ChannelData:
type: object
required:
- type
- data
- created
- updated
properties:
type:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
groups: # present only in account holder responses
type: array
items:
type: string
Topic:
type: object
required:
- topicId
- revision
- topicData
properties:
topicId:
type: string
revision:
type: string
topicData:
$ref: '#/components/schemas/TopicData'
TopicData:
type: object
required:
- dataType
- data
- created
- modified
- status
- tagCount
- tagUpdated
- tagRevision
properties:
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
modified:
type: integer
format: int64
status:
type: string
enum: [ unconfirmed, confirmed, complete, error ]
tagCount:
type: integer
format: int32
tagUpdate:
type: integer
format: int64
tagRevision:
type: integer
format: int64
Attribute:
type: object
required:
- attributeId
- revision
- attributeData
properties:
attributeId:
type: string
revision:
type: string
attributeData:
$ref: '#/components/schemas/AttributeData'
AttributeData:
type: object
required:
- article
- tagRevision
- tagCount
- tagUpdated
properties:
article:
$ref: '#/components/schemas/AttributeData'
groups: # present only in account holder responses
type: array
items:
type: string
tagCount:
type: integer
format: int32
tagUpdate:
type: integer
format: int64
tagRevision:
type: integer
format: int64
Tag:
type: object
required:
- tagId
- revision
- tagData
properties:
tagId:
type: string
revision:
type: string
tagData:
$ref: '#/components/schemas/TagData'
TagData:
type: object
required:
- dataType
- data
- created
- updated
properties:
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
Article:
type: object
required:
- articleId
- revision
- status
properties:
articleId:
type: string
revision:
type: string
dataType:
type: string
data:
type: string
created:
type: integer
format: int64
updated:
type: integer
format: int64
status:
type: string
enum: [ unconfirmed, confirmed, incomplete, error ]
Subject:
type: object
required:
- dataType
- data
properties:
dataType:
type: string
data:
type: string
Authenticate:
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
Connect:
type: object
required:
- contact
- token
properties:
contact:
type: string
token:
type: string
viewRevision:
type: integer
format: int64
contentRevision:
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
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
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]
securitySchemes:
basicAuth:
type: http
scheme: basic
basicCredentials:
type: http
scheme: basic
bearerAuth:
type: http
scheme: bearer