Velt Users API
Add, get, update, and delete the end users that participate in collaboration, plus user-group membership operations, so backends can keep Velt identities in sync with the host application's user directory.
Add, get, update, and delete the end users that participate in collaboration, plus user-group membership operations, so backends can keep Velt identities in sync with the host application's user directory.
openapi: 3.0.3
info:
title: Velt Data (REST) API
description: >-
Server-side REST API for the Velt real-time collaboration platform. Velt is
primarily a client SDK (React components and framework wrappers) that renders
presence, live cursors, comments, notifications, huddles, recordings, and
live selection inside applications. This Data API is the backend surface for
that SDK: it lets servers read and write comments, users, organizations,
folders, documents, notifications, and user groups, and manage workspace API
keys, auth tokens, and webhook endpoints. All endpoints are HTTPS POST calls
that take a JSON body wrapped in a top-level `data` object and are
authenticated with the `x-velt-api-key` and `x-velt-auth-token` headers.
termsOfService: https://velt.dev/terms
contact:
name: Velt Support
url: https://velt.dev
version: '2.0'
servers:
- url: https://api.velt.dev/v2
description: Velt Data API v2
security:
- apiKeyAuth: []
authToken: []
tags:
- name: Comments
description: Comment threads and annotations rendered by the SDK.
- name: Users
description: End users and user-group membership.
- name: Organizations
description: Top-level tenancy boundary.
- name: Documents
description: Documents and folders that collaboration attaches to.
- name: Notifications
description: Notifications and inbox/email configuration.
- name: Webhooks
description: Advanced webhook endpoints and event subscriptions.
- name: Auth
description: Workspace API keys and auth tokens.
paths:
/comments/add:
post:
operationId: addComments
tags:
- Comments
summary: Add comments
description: Create one or more comment threads on a document.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentAddRequest'
responses:
'200':
description: Comments created.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
'401':
$ref: '#/components/responses/Unauthorized'
/comments/get:
post:
operationId: getComments
tags:
- Comments
summary: Get comments
description: Retrieve comment threads for one or more documents in an organization.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Comments returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
'401':
$ref: '#/components/responses/Unauthorized'
/comments/update:
post:
operationId: updateComments
tags:
- Comments
summary: Update comments
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommentAddRequest'
responses:
'200':
description: Comments updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/comments/delete:
post:
operationId: deleteComments
tags:
- Comments
summary: Delete comments
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Comments deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/comments/annotations/get:
post:
operationId: getCommentAnnotations
tags:
- Comments
summary: Get comment annotations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Annotations returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/comments/annotations/count/get:
post:
operationId: getCommentAnnotationsCount
tags:
- Comments
summary: Get comment annotations count
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Annotation count returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/users/add:
post:
operationId: addUsers
tags:
- Users
summary: Add users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddRequest'
responses:
'200':
description: Users added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/users/get:
post:
operationId: getUsers
tags:
- Users
summary: Get users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Users returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/users/update:
post:
operationId: updateUsers
tags:
- Users
summary: Update users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserAddRequest'
responses:
'200':
description: Users updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/users/delete:
post:
operationId: deleteUsers
tags:
- Users
summary: Delete users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Users deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/user-groups/add:
post:
operationId: addUserGroups
tags:
- Users
summary: Add user groups
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: User group added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/user-groups/users/add:
post:
operationId: addUsersToGroups
tags:
- Users
summary: Add users to groups
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Users added to group.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/organizations/add:
post:
operationId: addOrganizations
tags:
- Organizations
summary: Add organizations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationAddRequest'
responses:
'200':
description: Organizations added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/organizations/get:
post:
operationId: getOrganizations
tags:
- Organizations
summary: Get organizations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Organizations returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/organizations/update:
post:
operationId: updateOrganizations
tags:
- Organizations
summary: Update organizations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationAddRequest'
responses:
'200':
description: Organizations updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/organizations/delete:
post:
operationId: deleteOrganizations
tags:
- Organizations
summary: Delete organizations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Organizations deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/folders/add:
post:
operationId: addFolder
tags:
- Documents
summary: Add folder
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Folder added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/folders/get:
post:
operationId: getFolders
tags:
- Documents
summary: Get folders
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Folders returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/documents/add:
post:
operationId: addDocuments
tags:
- Documents
summary: Add documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAddRequest'
responses:
'200':
description: Documents added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/documents/get:
post:
operationId: getDocuments
tags:
- Documents
summary: Get documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Documents returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/documents/update:
post:
operationId: updateDocuments
tags:
- Documents
summary: Update documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentAddRequest'
responses:
'200':
description: Documents updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/documents/move:
post:
operationId: moveDocuments
tags:
- Documents
summary: Move documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Documents moved.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/documents/delete:
post:
operationId: deleteDocuments
tags:
- Documents
summary: Delete documents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DocumentScopedRequest'
responses:
'200':
description: Documents deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/notifications/add:
post:
operationId: addNotifications
tags:
- Notifications
summary: Add notifications
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationAddRequest'
responses:
'200':
description: Notifications added.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/notifications/get:
post:
operationId: getNotifications
tags:
- Notifications
summary: Get notifications
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserScopedRequest'
responses:
'200':
description: Notifications returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/notifications/update:
post:
operationId: updateNotifications
tags:
- Notifications
summary: Update notifications
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationAddRequest'
responses:
'200':
description: Notifications updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/notifications/delete:
post:
operationId: deleteNotifications
tags:
- Notifications
summary: Delete notifications
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserScopedRequest'
responses:
'200':
description: Notifications deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/notifications/config/get:
post:
operationId: getNotificationConfig
tags:
- Notifications
summary: Get notification config
description: >-
Read inbox and email notification config for a user (or the organization
when getOrganizationConfig is true), optionally scoped to up to 30
documents.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationConfigGetRequest'
responses:
'200':
description: Config returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
'401':
$ref: '#/components/responses/Unauthorized'
/notifications/config/set:
post:
operationId: setNotificationConfig
tags:
- Notifications
summary: Set notification config
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationConfigGetRequest'
responses:
'200':
description: Config set.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/webhooks/endpoints/create:
post:
operationId: createWebhookEndpoint
tags:
- Webhooks
summary: Create advanced webhook endpoint
description: >-
Register a URL you control and select the collaboration event types to
subscribe to. Deliveries are HMAC-signed and retried with exponential
backoff.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookEndpointRequest'
responses:
'200':
description: Webhook endpoint created.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/webhooks/endpoints/get:
post:
operationId: getWebhookEndpoints
tags:
- Webhooks
summary: Get advanced webhook endpoints
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationScopedRequest'
responses:
'200':
description: Webhook endpoints returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/webhooks/endpoints/delete:
post:
operationId: deleteWebhookEndpoint
tags:
- Webhooks
summary: Delete advanced webhook endpoint
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookEndpointRequest'
responses:
'200':
description: Webhook endpoint deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/workspace/apikey/create:
post:
operationId: createApiKey
tags:
- Auth
summary: Create API key
description: Provision a new API key and its auth token for the workspace.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
responses:
'200':
description: API key created.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/workspace/apikey/get:
post:
operationId: getApiKeys
tags:
- Auth
summary: Get API keys
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
responses:
'200':
description: API keys returned.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
/workspace/apikey/auth-token/reset:
post:
operationId: resetAuthToken
tags:
- Auth
summary: Reset auth token
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
responses:
'200':
description: Auth token reset.
content:
application/json:
schema:
$ref: '#/components/schemas/Result'
components:
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: x-velt-api-key
description: Your Velt API key.
authToken:
type: apiKey
in: header
name: x-velt-auth-token
description: Your Velt auth token that authorizes the API key.
responses:
Unauthorized:
description: Missing or invalid API key / auth token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
DataEnvelope:
type: object
required:
- data
description: All Velt Data API requests wrap their payload in a top-level `data` object.
properties:
data:
type: object
OrganizationScopedRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
properties:
organizationId:
type: string
description: Organization identifier.
UserScopedRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- userId
properties:
organizationId:
type: string
userId:
type: string
DocumentScopedRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
properties:
organizationId:
type: string
documentId:
type: string
description: Single document identifier.
documentIds:
type: array
items:
type: string
description: Up to 30 document identifiers.
CommentAddRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- documentId
properties:
organizationId:
type: string
documentId:
type: string
comments:
type: array
items:
$ref: '#/components/schemas/Comment'
Comment:
type: object
properties:
commentId:
type: string
annotationId:
type: string
text:
type: string
from:
$ref: '#/components/schemas/UserRef'
status:
type: string
example: OPEN
UserRef:
type: object
properties:
userId:
type: string
name:
type: string
email:
type: string
format: email
UserAddRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- users
properties:
organizationId:
type: string
users:
type: array
items:
$ref: '#/components/schemas/UserRef'
OrganizationAddRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizations
properties:
organizations:
type: array
items:
type: object
properties:
organizationId:
type: string
name:
type: string
DocumentAddRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- documents
properties:
organizationId:
type: string
documents:
type: array
items:
type: object
properties:
documentId:
type: string
documentName:
type: string
folderId:
type: string
NotificationAddRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- notifications
properties:
organizationId:
type: string
notifications:
type: array
items:
type: object
properties:
documentId:
type: string
toUserId:
type: string
message:
type: string
NotificationConfigGetRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- userId
properties:
organizationId:
type: string
userId:
type: string
documentIds:
type: array
items:
type: string
description: Up to 30 document IDs for document-level config.
getOrganizationConfig:
type: boolean
description: Set true to fetch organization-level config instead of user-level.
WebhookEndpointRequest:
type: object
required:
- data
properties:
data:
type: object
required:
- organizationId
- url
properties:
organizationId:
type: string
url:
type: string
format: uri
description: The endpoint URL you control.
eventTypes:
type: array
items:
type: string
description: >-
Collaboration event types to subscribe to (for example comment
newlyAdded and statusChanged actions).
Result:
type: object
properties:
status:
type: string
example: success
message:
type: string
data:
type: array
items:
type: object
Error:
type: object
properties:
status:
type: string
example: error
message:
type: string