> ## Documentation Index
> Fetch the complete documentation index at: https://velt.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API Methods Index

# Comments

### Threads

#### addCommentAnnotation()

Add a new comment annotation.

* Params: [AddCommentAnnotationRequest](/api-reference/sdk/models/data-models#addcommentannotationrequest)
* Returns: [AddCommentAnnotationEvent](/api-reference/sdk/models/data-models#addcommentannotationevent)
* React Hook: `useAddCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addcommentannotation)

#### addCommentOnSelectedText()

Add a comment on selected text.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addcommentonselectedtext)

#### addCommentOnElement()

Add a comment on a specific element.

* Params: `{ targetElement: object, commentData: array, status?: string }`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addcommentonelement)

#### addManualComment()

Add a comment with custom positioning.

* Params: `ManualCommentAnnotationConfig`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addmanualcomment)

#### deleteCommentAnnotation()

Delete a comment annotation.

* Params: [DeleteCommentAnnotationRequest](/api-reference/sdk/models/data-models#deletecommentannotationrequest)
* Returns: [DeleteCommentAnnotationEvent](/api-reference/sdk/models/data-models#deletecommentannotationevent)
* React Hook: `useDeleteCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deletecommentannotation)

#### deleteSelectedComment()

Delete the currently selected comment.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deleteselectedcomment)

#### getCommentAnnotationsCount()

Get the total and unread comment annotations count for specified documents.

* Params: [CommentRequestQuery](/api-reference/sdk/models/data-models#commentrequestquery) (optional)
* Returns: [`Observable<GetCommentAnnotationsCountResponse>`](/api-reference/sdk/models/data-models#getcommentannotationscountresponse)
* React Hook: `useCommentAnnotationsCount()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcommentannotationscount)

#### getUnreadCommentAnnotationCountByLocationId()

Get count of unread comment annotations by location ID.

* Params: `locationId: string`
* Returns: `Observable<UnreadCommentsCount | null>`
* React Hook: `useUnreadCommentAnnotationCountByLocationId()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getunreadcommentannotationcountbylocationid)

#### getCommentAnnotations()

Get all the comment annotations for all the specified documents.

* Params: [CommentRequestQuery](/api-reference/sdk/models/data-models#commentrequestquery) (optional)
* Returns: [`Observable<GetCommentAnnotationsResponse>`](/api-reference/sdk/models/data-models#getcommentannotationsresponse)
* React Hook: `useGetCommentAnnotations()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcommentannotations)

#### getSelectedComments()

Get currently selected comment annotations.

* Params: none
* Returns: `Observable<CommentAnnotation[]>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getselectedcomments)

#### getCommentAnnotationById()

Get a specific comment annotation by ID.

* Params: `{ annotationId: string, documentId?: string }`
* Returns: `Observable<CommentAnnotation>`
* React Hook: `useCommentAnnotationById()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcommentannotationbyid)

#### getElementRefByAnnotationId()

Get the DOM element reference for a comment annotation.

* Params: `annotationId: string`
* Returns: `string`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getelementrefbyannotationid)

#### submitComment()

Programmatically submit a comment from a composer.

* Params: [`SubmitCommentRequest`](/api-reference/sdk/models/data-models#submitcommentrequest)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#submitcomment)

#### enableDraftMode()

Enable Draft Mode to save partial comments as drafts.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#draftmode)

#### disableDraftMode()

Disable Draft Mode to prevent saving partial comments as drafts.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#draftmode)

#### clearComposer()

Reset composer state including text, attachments, recordings, tagged users, assignments, custom lists.

* Params: [`ClearComposerRequest`](/api-reference/sdk/models/data-models#clearcomposerrequest)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#clearcomposer)

#### getComposerData()

Fetch current composer state on-demand. Returns same data structure as composerTextChange event.

* Params: [`GetComposerDataRequest`](/api-reference/sdk/models/data-models#getcomposerdatarequest)
* Returns: [`ComposerTextChangeEvent`](/api-reference/sdk/models/data-models#composertextchangeevent) | `null`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcomposerdata)

#### setContextProvider()

Set a function to provide context dynamically for comment annotations.

* Params: [`CommentContextProvider`](/api-reference/sdk/models/data-models#commentcontextprovider) | `null`
* Returns: `void`
* React Hook: `useSetContextProvider()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcontextprovider)

#### updateVisibility()

Programmatically set comment visibility to `public`, `organizationPrivate`, or `restricted`. When setting `restricted` type, the current user's `userId` is automatically appended to `userIds` if not already present.

* Params: `annotationId: string`, [`config: CommentVisibilityConfig`](/api-reference/sdk/models/data-models#commentvisibilityconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatevisibility)

#### enablePrivateMode()

Enable private mode so new comments are created with restricted visibility by default.

* Params: [`PrivateModeConfig`](/api-reference/sdk/models/data-models#privatemodeconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableprivatemode)

#### disablePrivateMode()

Disable private mode, reverting new comments to default visibility.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#disableprivatemode)

#### enableVisibilityOptions()

Enable the visibility banner in the comment composer, letting users set visibility before submitting.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#visibilityoptions)

#### disableVisibilityOptions()

Disable the visibility banner in the comment composer.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#visibilityoptions)

#### setAssignToType()

Configure assignment UI mode.

* Params: [`AssignToConfig`](/api-reference/sdk/models/data-models#assigntoconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setassigntotype)

#### enableContextInPageModeComposer()

Enable passing context data to page mode composer when opening via comment tool.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#contextinpagemodecomposer)

#### disableContextInPageModeComposer()

Disable passing context data to page mode composer.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#contextinpagemodecomposer)

#### clearPageModeComposerContext()

Clear context data from page mode composer.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#contextinpagemodecomposer)

#### enableFormatOptions()

Enable text formatting toolbar in comment composers.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableformatoptions)

#### disableFormatOptions()

Disable text formatting toolbar in comment composers.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableformatoptions)

#### setFormatConfig()

Configure individual text formatting options (bold, italic, underline, strikethrough).

* Params: [`FormatConfig`](/api-reference/sdk/models/data-models#formatconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setformatconfig)

### Slate

#### withVeltComments()

Higher-order function that enhances a Slate editor with Velt comments capabilities.

* Params:
  * `editor: Editor`
  * `options?: VeltCommentsEditorOptions`
* Returns: `VeltCommentsEditor`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/slatejs#withveltcomments)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Signature: `async (request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest)`) => Promise<void>`
* Params: `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest)
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/slatejs#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Signature: `(request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest)`) => void`
* Params: `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/slatejs#rendercomments)

#### SlateVeltComment

React component that renders a Velt comment text element with annotation ID.

* Params:
  * `props: RenderElementProps`
  * `element:` [VeltCommentsElement](/api-reference/sdk/models/data-models#veltcommentselement)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/slatejs#slateveltcomment)

### Tiptap

#### TiptapVeltComments.configure()

A custom Tiptap extension for Velt comments.

* Params: `options?:` [TiptapVeltCommentsOptions](/api-reference/sdk/models/data-models#tiptapveltcommentsoptions)
* Returns: `TiptapVeltComments`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/tiptap#tiptapveltcomments)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Params:
  * `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest)
    * `editor: Editor`
    * `editorId?: string`
    * `context?: unknown`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/tiptap#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Params:
  * `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest)
    * `editor: Editor`
    * `editorId?: string`
    * `commentAnnotations?:` [CommentAnnotation\[\]](/api-reference/sdk/models/data-models#commentannotation)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/tiptap#rendercomments)

### Lexical

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Signature: `addComment: async (request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest-3)) `=> Promise<void>`
* Params: [`AddCommentRequest`](/api-reference/sdk/models/data-models#addcommentrequest-3)
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/lexical#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Signature: `renderComments: (request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest-3)`) => void`
* Params: [`RenderCommentsRequest`](/api-reference/sdk/models/data-models#rendercommentsrequest-3)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/lexical#rendercomments)

#### exportJSONWithoutComments()

Export the editor state JSON while stripping comment nodes and normalizing adjacent text nodes.

* Signature: `exportJSONWithoutComments(editor: LexicalEditor): SerializedEditorState<SerializedLexicalNode>`
* Params: `editor:` [`LexicalEditor`](https://lexical.dev/docs/api/classes/lexical.LexicalEditor)
* Returns: `SerializedEditorState<SerializedLexicalNode>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/lexical#exportjsonwithoutcomments)

### Plate

#### VeltCommentsPlugin.configure()

A Plate.js plugin for Velt comments.

* Params: `options?:` [VeltCommentsPluginConfig](/api-reference/sdk/models/data-models#veltcommentspluginconfig)
* Returns: `Plate Plugin`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/plate#veltcommentsplugin)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Params:
  * `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest-4)
    * `editor: PlateEditor`
    * `editorId?: string`
    * `context?: object`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/plate#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Params:
  * `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest-4)
    * `editor: PlateEditor`
    * `editorId?: string`
    * `commentAnnotations?:` [CommentAnnotation\[\]](/api-reference/sdk/models/data-models#commentannotation)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/plate#rendercomments)

#### exportJSONWithoutComments()

Exports the editor content as JSON with Velt comment elements removed.

* Params: `content: Descendant[]`
* Returns: `Descendant[]`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/plate#exportjsonwithoutcomments)

#### PlateVeltComment

React component that renders a Velt comment element in the editor.

* Params:
  * `props: PlateRenderElementProps`
  * `element:` [VeltCommentsElement](/api-reference/sdk/models/data-models#veltcommentselement-2)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/plate#plateveltcomment)

### CodeMirror

#### CodemirrorVeltComments()

Creates the Velt Comments extension for CodeMirror.

* Params: `config?:` [CodemirrorVeltCommentsConfig](/api-reference/sdk/models/data-models#codemirrorveltcommentsconfig)
* Returns: CodeMirror `Extension`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/codemirror#codemirrorveltcomments)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Params:
  * `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest-4)
    * `editor: EditorView`
    * `editorId?: string`
    * `context?: object`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/codemirror#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Params:
  * `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest-4)
    * `editor: EditorView`
    * `editorId?: string`
    * `commentAnnotations?:` [CommentAnnotation\[\]](/api-reference/sdk/models/data-models#commentannotation)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/codemirror#rendercomments)

### Ace

#### AceVeltComments()

Initializes the Velt Comments extension for an Ace Editor instance.

* Params: `editor: Ace.Editor`, `config?:` [AceVeltCommentsConfig](/api-reference/sdk/models/data-models#aceveltcommentsconfig)
* Returns: `() => void` - Cleanup function to remove event listeners
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/ace#aceveltcomments)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Params:
  * `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest-5)
    * `editor: Ace.Editor`
    * `editorId?: string`
    * `context?: object`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/ace#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Params:
  * `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest-5)
    * `editor: Ace.Editor`
    * `editorId?: string`
    * `commentAnnotations?:` [CommentAnnotation\[\]](/api-reference/sdk/models/data-models#commentannotation)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/ace#rendercomments)

### Quill

#### QuillVeltComments

The Velt Comments module for Quill. Register it with Quill before creating the editor.

* Params: `config?:` [QuillVeltCommentsConfig](/api-reference/sdk/models/data-models#quillveltcommentsconfig)
* Returns: `Quill Module`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/quill#quillveltcomments)

#### addComment()

Creates a comment annotation for the currently selected text in the editor.

* Params:
  * `request:` [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest-6)
    * `editor: Quill`
    * `editorId?: string`
    * `context?: object`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/quill#addcomment)

#### renderComments()

Renders and highlights comment annotations in the editor.

* Params:
  * `request:` [RenderCommentsRequest](/api-reference/sdk/models/data-models#rendercommentsrequest-6)
    * `editor: Quill`
    * `editorId?: string`
    * `commentAnnotations?:` [CommentAnnotation\[\]](/api-reference/sdk/models/data-models#commentannotation)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/setup/quill#rendercomments)

### Messages

#### addComment()

Add a comment to a specific comment annotation.

* Params: [AddCommentRequest](/api-reference/sdk/models/data-models#addcommentrequest)
* Returns: [AddCommentEvent](/api-reference/sdk/models/data-models#addcommentevent)
* React Hook: `useAddComment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addcomment)

#### updateComment()

Update a comment in a specific comment annotation.

* Params: [UpdateCommentRequest](/api-reference/sdk/models/data-models#updatecommentrequest)
* Returns: [UpdateCommentEvent](/api-reference/sdk/models/data-models#updatecommentevent)
* React Hook: `useUpdateComment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatecomment)

#### deleteComment()

Delete a comment from a specific comment annotation.

* Params: [DeleteCommentRequest](/api-reference/sdk/models/data-models#deletecommentrequest)
* Returns: [DeleteCommentEvent](/api-reference/sdk/models/data-models#deletecommentevent)
* React Hook: `useDeleteComment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deletecomment)

#### getComment()

Get comments from a specific comment annotation.

* Params: [GetCommentRequest](/api-reference/sdk/models/data-models#getcommentrequest)
* Returns: [Comment\[\]](/api-reference/sdk/models/data-models#comment)
* React Hook: `useGetComment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcomment)

#### getUnreadCommentCountOnCurrentDocument()

Get the number of unread comments on the current document.

* Params: none
* Returns: `Observable<UnreadCommentsCount | null>`
* React Hook: `useUnreadCommentCountOnCurrentDocument()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getunreadcommentcountoncurrentdocument)

#### getUnreadCommentCountByLocationId()

Get the number of unread comments by location ID.

* Params: `locationId: string`
* Returns: `Observable<UnreadCommentsCount | null>`
* React Hook: `useUnreadCommentCountByLocationId()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getunreadcommentcountbylocationid)

#### getUnreadCommentCountByAnnotationId()

Get the number of unread comments by annotation ID.

* Params: `annotationId: string`
* Returns: `Observable<number>`
* React Hook: `useUnreadCommentCountByAnnotationId()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getunreadcommentcountbyannotationid)

#### markAsRead()

Mark a comment annotation as read for the current user.

* Params: `annotationId: string`
* Returns: `Promise<void>`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#markasread)

#### markAsUnread()

Mark a comment annotation as unread for the current user.

* Params: `annotationId: string`
* Returns: `Promise<void>`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#markasunread)

### @Mentions

#### assignUser()

Assign a user to a comment annotation.

* Params: [AssignUserRequest](/api-reference/sdk/models/data-models#assignuserrequest)
* Returns: [AssignUserEvent](/api-reference/sdk/models/data-models#assignuserevent)
* React Hook: `useAssignUser()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#assignuser)

#### disableCustomAutocompleteSearch()

Disable custom autocomplete search for contact list.

* Params: `none`
* Returns: `void`
* React Hook: `useContactUtils()` or `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecustomautocompletesearch)

#### enableAtHere()

Enable or disable @here mentions.

* Params: none
* Returns: `void`
* React Hook: `useContactUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableathere)

#### enableUserMentions()

Enable or disable user @mentions.

* Params: none
* Returns: `void`
* React Hook: `useContactUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableusermentions)

#### enablePaginatedContactList()

Enable paginated loading of contact list.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepaginatedcontactlist)

#### disablePaginatedContactList()

Disable paginated loading of contact list.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepaginatedcontactlist)

#### enableAnonymousEmail()

Enable display of unrecognized email addresses in the @mention dropdown.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#anonymousemail)

#### disableAnonymousEmail()

Suppress unrecognized email addresses from appearing in the @mention dropdown.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#anonymousemail)

#### enableCustomAutocompleteSearch()

Enable custom autocomplete search for contact list.

* Params: `none`
* Returns: `void`
* React Hook: `useContactUtils()` or `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecustomautocompletesearch)

#### getContactList()

Subscribe to the list of users added to organization, folder, document, user groups or the ones overwritten using the `updateContactList` API.

* Params: none
* Returns: [`Observable<GetContactListResponse>`](/api-reference/sdk/models/data-models#getcontactlistresponse)
* React Hook: `useContactList()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getcontactlist)

#### onContactSelected()

Listen for when a contact is selected from the dropdown.

* Params: none
* Returns: [`Observable<UserContactSelectedPayload>`](/api-reference/sdk/models/data-models#usercontactselectedpayload)
* React Hook: `useContactSelected()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#oncontactselected)

#### setAtHereLabel()

Customize the @here label text.

* Params: `label: string`
* Returns: `void`
* React Hook: `useContactUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setatherelabel)

#### setAtHereDescription()

Customize the @here description text.

* Params: `description: string`
* Returns: `void`
* React Hook: `useContactUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setatheredescription)

#### subscribeCommentAnnotation()

Subscribe to a comment annotation.

* Params: [SubscribeCommentAnnotationRequest](/api-reference/sdk/models/data-models#subscribecommentannotationrequest)
* Returns: [SubscribeCommentAnnotationEvent](/api-reference/sdk/models/data-models#subscribecommentannotationevent)
* React Hook: `useSubscribeCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#subscribecommentannotation)

#### unsubscribeCommentAnnotation()

Unsubscribe from a comment annotation.

* Params: [UnsubscribeCommentAnnotationRequest](/api-reference/sdk/models/data-models#unsubscribecommentannotationrequest)
* Returns: [UnsubscribeCommentAnnotationEvent](/api-reference/sdk/models/data-models#unsubscribecommentannotationevent)
* React Hook: `useUnsubscribeCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#unsubscribecommentannotation)

#### updateContactList()

Update the contact list for the current user session.

* Params: `contacts: Array<{userId: string, name: string, email: string}>, options?: {merge: boolean, filters: boolean}`
* Returns: `void`
* React Hook: `useContactUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatecontactlist)

#### updateContactListScopeForOrganizationUsers()

Restrict which contacts are shown in the dropdown for organization users.

* Params: `scopes: Array<'all' | 'organization' | 'organizationUserGroup' | 'document'>`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatecontactlistscopefororganizationusers)

### Metadata

#### addContext()

Add custom metadata to a comment annotation.

* Params: `{ [key: string]: any }`
* Returns: `void`
* React Hook: `useCommentEventCallback('addCommentAnnotation')`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addcontext)

#### updateContext()

Update custom metadata on a comment annotation.

* Params: `annotationId: string, context: { [key: string]: any }, config?: { merge: boolean }`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatecontext)

### Custom Lists

#### addCustomListDataOnAnnotation()

Add a custom dropdown list at the Comment Annotation level.

* Params: `{ type: 'multi' | 'single', placeholder: string, data: Array<{ id: string, label: string }> }`
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#createcustomlistdataoncomment)

#### addCustomListDataOnComment()

Add a custom dropdown list that appears when a hotkey is pressed in the comment composer.

* Params: `{ hotkey: string, type: 'custom', data: Array<AutocompleteItem> }`
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#createcustomlistdataoncomment)

#### onAutocompleteChipClick()

Listen for clicks on autocomplete chips in comments.

* Params: none
* Returns: `Observable<AutocompleteItem>`
* React Hook: `useAutocompleteChipClick()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#createcustomlistdataoncomment)

#### enableCustomAutocompleteSearch()

Enable custom autocomplete search for custom list.

* Params: `none`
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecustomautocompletesearch)

#### disableCustomAutocompleteSearch()

Disable custom autocomplete search for custom list.

* Params: `none`
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecustomautocompletesearch)

### Event Subscription

#### on()

Subscribe to comment events.

* Params: `CommentEventType`. [Here](/async-collaboration/comments/customize-behavior#on) is the list of event types you can subscribe to.
* Returns: `Observable<CommentEventTypesMap[T]>`. [Here](/api-reference/sdk/models/data-models#comment) is the list of events object types you can expect to receive.
* React Hook: `useCommentEventCallback(CommentEventType)`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#on)

### Attachments

#### enableAttachments()

Enable file attachments in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableattachments)

#### enableAttachmentDownload()

Allow clicking an attachment to trigger a file download.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableattachmentdownload)

#### disableAttachmentDownload()

Prevent clicking an attachment from triggering a file download; `attachmentDownloadClicked` still fires.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableattachmentdownload)

#### enableScreenshot()

Enable screenshot option in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablescreenshot)

#### disableScreenshot()

Disable screenshot option in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablescreenshot)

#### addAttachment()

Add an attachment to a specific comment annotation.

* Params: [AddAttachmentRequest](/api-reference/sdk/models/data-models#addattachmentrequest)
* Returns: `Promise<AddAttachmentResponse[]>`
* React Hook: `useAddAttachment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addattachment)

#### deleteAttachment()

Delete an attachment from a specific comment annotation.

* Params: [DeleteAttachmentRequest](/api-reference/sdk/models/data-models#deleteattachmentrequest)
* Returns: `Promise<DeleteAttachmentEvent | null>`
* React Hook: `useDeleteAttachment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deleteattachment)

#### getAttachment()

Get attachments from a specific comment annotation.

* Params: [GetAttachmentRequest](/api-reference/sdk/models/data-models#getattachmentrequest)
* Returns: `Promise<Attachment[]>`
* React Hook: `useGetAttachment()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getattachment)

#### setAllowedFileTypes()

Limit file types in comment attachments by specifying allowed file extensions.

* Params: `string[]` (array of file extensions)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#allowedfiletypes)

#### setComposerFileAttachments()

Programmatically add file attachments to the comment composer from your application instead of requiring users to select files from the file system.

* Params: [UploadFileData](/api-reference/sdk/models/data-models#uploadfiledata)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcomposerfileattachments)

#### enableAttachmentDownload()

Enable automatic file downloads when clicking the download button on attachments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#attachmentdownload)

#### disableAttachmentDownload()

Disable automatic file downloads. The `attachmentDownloadClicked` event still fires, allowing custom download logic.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#attachmentdownload)

### Reactions

#### enableReactions()

Enable emoji reactions in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablereactions)

#### setCustomReactions()

Set custom reactions by passing a map containing reaction information.

* Params: `{[reactionId: string]: {url?: string, emoji?: string}}`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcustomreactions)

#### addReaction()

Add a reaction to a specific comment annotation.

* Params: [AddReactionRequest](/api-reference/sdk/models/data-models#addreactionrequest)
* Returns: `Promise<AddReactionEvent | null>`
* React Hook: `useAddReaction()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#addreaction)

#### deleteReaction()

Delete a reaction from a specific comment annotation.

* Params: [DeleteReactionRequest](/api-reference/sdk/models/data-models#deletereactionrequest)
* Returns: `Promise<DeleteReactionEvent | null>`
* React Hook: `useDeleteReaction()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deletereaction)

#### toggleReaction()

Toggle a reaction for a specific comment annotation.

* Params: [ToggleReactionRequest](/api-reference/sdk/models/data-models#togglereactionrequest)
* Returns: `Promise<ToggleReactionEvent | null>`
* React Hook: `useToggleReaction()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#togglereaction)

### Status & Priority

#### enableStatus()

Enable status dropdown & filters in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablestatus)

#### setCustomStatus()

Set custom statuses by passing an array of status objects.

* Params: `StatusConfig[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcustomstatus)

#### enableResolveButton()

Enable resolve button on comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableresolvebutton)

#### updateStatus()

Update the status of a comment annotation.

* Params: [UpdateStatusRequest](/api-reference/sdk/models/data-models#updatestatusrequest)
* Returns: `Promise<UpdateStatusEvent>`
* React Hook: `useUpdateStatus()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatestatus)

#### resolveCommentAnnotation()

Resolve a comment annotation.

* Params: [ResolveCommentAnnotationRequest](/api-reference/sdk/models/data-models#resolvecommentannotationrequest)
* Returns: `Promise<ResolveCommentAnnotationEvent>`
* React Hook: `useResolveCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#resolvecommentannotation)

#### enablePriority()

Enable priority settings in comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepriority)

#### setCustomPriority()

Set custom priorities by passing an array of priority objects.

* Params: `PriorityConfig[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcustompriority)

#### updatePriority()

Update the priority of a comment annotation.

* Params: [UpdatePriorityRequest](/api-reference/sdk/models/data-models#updatepriorityrequest)
* Returns: `Promise<UpdatePriorityEvent>`
* React Hook: `useUpdatePriority()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatepriority)

### Recordings

#### deleteRecording()

Delete a recording from a comment.

* Params: [DeleteRecordingRequest](/api-reference/sdk/models/data-models#deleterecordingrequest)
* Returns: `Promise<DeleteRecordingEvent | null>`
* React Hook: `useDeleteRecording()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#deleterecording)

#### getRecording()

Get recordings from a comment.

* Params: [GetRecordingRequest](/api-reference/sdk/models/data-models#getrecordingrequest)
* Returns: `Promise<RecordedData[]>`
* React Hook: `useGetRecording()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getrecording)

#### setAllowedRecordings()

Set allowed recording types (audio, video, screen).

* Params: `string`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setallowedrecordings)

#### enableRecordingCountdown()

Enable countdown before recording starts.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablerecordingcountdown)

#### enableRecordingTranscription()

Enable AI transcription for recordings.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablerecordingtranscription)

### Deep Link

#### getLink()

Get a link to a specific comment annotation.

* Params: [GetLinkRequest](/api-reference/sdk/models/data-models#getlinkrequest)
* Returns: [GetLinkResponse](/api-reference/sdk/models/data-models#getlinkresponse)
* React Hook: `useGetLink()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#getlink)

#### copyLink()

Copy a link to a specific comment annotation to clipboard.

* Params: [CopyLinkRequest](/api-reference/sdk/models/data-models#copylinkrequest)
* Returns: [CopyLinkEvent](/api-reference/sdk/models/data-models#copylinkevent)
* React Hook: `useCopyLink()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#copylink)

### Navigation

#### scrollToCommentByAnnotationId()

Scroll the page to a comment's location.

* Params: `annotationId: string`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#scrolltocommentbyannotationid)

#### selectCommentByAnnotationId()

Programmatically select a comment annotation. When called without arguments or with an invalid ID, it will close the currently selected annotation.

* Params: `annotationId?: string` (optional)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#selectcommentbyannotationid)

#### onCommentSelectionChange()

Subscribe to comment selection changes.

* Params: none
* Returns: `Observable<CommentSelectionChangeData>`
* React Hook: `useCommentSelectionChangeHandler()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#oncommentselectionchange)

#### enablescrollToComment()

Enable automatic scrolling to comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablescrolltocomment)

### DOM Controls

#### allowedElementIds()

Set allowed element IDs for commenting.

* Params: `elementIds: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#allowedelementids)

#### allowedElementClassNames()

Set allowed element class names for commenting.

* Params: `classNames: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#allowedelementclassnames)

#### allowedElementQuerySelectors()

Set allowed element query selectors for commenting.

* Params: `selectors: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#allowedelementqueryselectors)

#### setContextInPageModeComposer()

Set context data and optional target element for page mode composer.

* Params: [`PageModeComposerConfig`](/api-reference/sdk/models/data-models#pagemodecomposerconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcontextinpagemodecomposer)

#### focusPageModeComposer()

Focus the page mode composer input field.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#focuspagemodecomposer)

### AI Categorization

#### enableAutoCategorize()

Enable AI auto-categorization of comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableautocategorize)

#### setCustomCategory()

Set custom categories for comment categorization.

* Params: `categories: Array<{id: string, name: string, color: string}>`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setcustomcategory)

### UI

#### updateCommentDialogPosition()

Update position of comment dialog relative to pin.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#updatecommentdialogposition)

#### enableSidebarButtonOnCommentDialog()

Enable sidebar button on comment dialogs.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablesidebarbuttononcommentdialog)

#### onSidebarButtonOnCommentDialogClick()

Subscribe to clicks on comment dialog sidebar button.

* Params: none
* Returns: `Observable<any>`
* React Hook: `useCommentDialogSidebarClickHandler()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#onsidebarbuttononcommentdialogclick)

#### enableDeleteReplyConfirmation()

Enable confirmation dialog before deleting replies.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledeletereplyconfirmation)

#### enableMobileMode()

Enable mobile-optimized comment UI.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablemobilemode)

#### enableCommentPinHighlighter()

Enable highlighting outline around comment pins.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecommentpinhighlighter)

#### enablePinDrag()

Enable dragging of comment pins to reposition them.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#pindrag)

#### disablePinDrag()

Disable dragging of comment pins.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#pindrag)

#### showCommentsOnDom()

Show comments on the DOM.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#showCommentsOnDom)

#### enableDialogOnHover()

Enable showing comment dialog on hover.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledialogonhover)

#### enableFloatingCommentDialog()

Enable floating comment dialog next to pins.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablefloatingcommentdialog)

#### showResolvedCommentsOnDom()

Show resolved comments on the DOM.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#showresolvedcommentsondom)

#### enableCollapsedComments()

Enable collapsing of comments in annotations.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecollapsedcomments)

#### enableShortUserName()

Enable shortening of long user names.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableshortusername)

#### enableSignInButton()

Enable sign in button on comment dialog when user is anonymous or signed out.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablesigninbutton)

#### onSignIn()

Handle sign in button click event.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#onsignin)

### Comment Dialog Primitives

92+ primitive components for building custom comment interfaces. See [Data Models](/api-reference/sdk/models/data-models#comment-dialog-primitives) for type definitions.

#### VeltCommentDialogContextWrapper

Context wrapper that provides shared annotation context to child primitives.

* Params: [`CommentDialogContextWrapperProps`](/api-reference/sdk/models/data-models#commentdialogcontextwrapperprops)
* Returns: `N/A`
* React Hook: `n/a`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogcontextwrapper)

#### VeltCommentDialogHeader

Header component for the comment dialog.

* Params: [`CommentDialogCommonProps`](/api-reference/sdk/models/data-models#commentdialogcommonprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogheader)

#### VeltCommentDialogBody

Body container for the comment dialog thread content.

* Params: [`CommentDialogCommonProps`](/api-reference/sdk/models/data-models#commentdialogcommonprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogbody)

#### VeltCommentDialogThreadCard

Complete thread card with comment metadata and content.

* Params: [`ThreadCardProps`](/api-reference/sdk/models/data-models#threadcardprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogthreadcard)

#### VeltCommentDialogThreadCardAvatar

User avatar for the comment author.

* Params: [`CommentIndexProps`](/api-reference/sdk/models/data-models#commentindexprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogthreadcardavatar)

#### VeltCommentDialogComposer

Complete composer with input, attachments, and action buttons.

* Params: [`ComposerProps`](/api-reference/sdk/models/data-models#composerprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogcomposer)

#### VeltCommentDialogComposerInput

Text input field for composing comments.

* Params: [`ComposerInputProps`](/api-reference/sdk/models/data-models#composerinputprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogcomposerinput)

#### VeltCommentDialogStatusDropdownContentItem

Individual status item in the dropdown.

* Params: [`StatusDropdownItemProps`](/api-reference/sdk/models/data-models#statusdropdownitemprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogstatusdropdowncontentitem)

#### VeltCommentDialogPriorityDropdownContentItem

Individual priority item in the dropdown.

* Params: [`PriorityDropdownItemProps`](/api-reference/sdk/models/data-models#prioritydropdownitemprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogprioritydropdowncontentitem)

#### VeltCommentDialogOptionsDropdown

Options menu for actions like assignment, editing, and notifications.

* Params: [`OptionsDropdownProps`](/api-reference/sdk/models/data-models#optionsdropdownprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogoptionsdropdown)

#### VeltCommentDialogCustomAnnotationDropdownTriggerListItem

Individual item in the custom annotation dropdown trigger list.

* Params: [`CustomAnnotationItemProps`](/api-reference/sdk/models/data-models#customannotationitemprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogcustomannotationdropdowntriggerlistitem)

#### VeltCommentDialogCustomAnnotationDropdownContentItem

Individual item in the custom annotation dropdown content.

* Params: [`CustomAnnotationItemProps`](/api-reference/sdk/models/data-models#customannotationitemprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogcustomannotationdropdowncontentitem)

#### VeltCommentDialogReplyAvatarsListItem

Individual avatar item in the reply avatars list.

* Params: [`ReplyAvatarsListItemProps`](/api-reference/sdk/models/data-models#replyavatarslistitemprops)
* Returns: `N/A`
* [Usage Examples →](/ui-customization/features/async/comments/comment-dialog/primitives#veltcommentdialogreplyavatarslistitem)

### Extra Information

#### enableCommentIndex()

Enable comment index indicators on pins and sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecommentindex)

#### enableDeviceInfo()

Enable device type indicators in comment threads.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledeviceinfo)

#### enableDeviceIndicatorOnCommentPins()

Enable device type indicators on comment pins.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledeviceindicatoroncommentpins)

#### enableGhostComments()

Enable showing ghost comments on the DOM.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableghostcomments)

#### enableGhostCommentsIndicator()

Enable ghost comment labels in the sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableghostcommentsindicator)

### Special File Type Support

#### enableSvgAsImg()

Treat SVGs as flat images instead of layered elements.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#svgAsImg)

### Keyboard Controls

#### enableHotkey()

Enable hotkeys for comments (e.g. 'c' to enable comment mode).

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablehotkey)

#### enableEnterKeyToSubmit()

Enable using Enter key to submit comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableentertosubmit)

#### enableDeleteOnBackspace()

Enable deleting comments with backspace key.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledeleteonbackspace)

### Moderation

#### enableModeratorMode()

Enable moderator mode for comments requiring approval.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablemoderatormode)

#### enableResolveStatusAccessAdminOnly()

Restrict resolve action to admin users and comment authors.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableresolvestatusaccessadminonly)

#### approveCommentAnnotation()

Approve a comment annotation in moderator mode.

* Params: `ApproveCommentAnnotationRequest`
* Returns: `Promise<ApproveCommentAnnotationEvent>`
* React Hook: `useApproveCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#approvecommentannotation)

#### acceptCommentAnnotation()

Accept a comment annotation in suggestion mode.

* Params: `AcceptCommentAnnotationRequest`
* Returns: `Promise<AcceptCommentAnnotationEvent>`
* React Hook: `useAcceptCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#acceptcommentannotation)

#### rejectCommentAnnotation()

Reject a comment annotation in suggestion mode.

* Params: `RejectCommentAnnotationRequest`
* Returns: `Promise<RejectCommentAnnotationEvent>`
* React Hook: `useRejectCommentAnnotation()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#rejectcommentannotation)

#### enableSuggestionMode()

Enable suggestion mode for accepting/rejecting comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablesuggestionmode)

### Comment Read Status

#### enableSeenByUsers()

Enable "Seen By" feature to show which users have seen each comment.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableseenbyusers)

#### setUnreadIndicatorMode()

Set unread indicator mode to either minimal (dot) or verbose (badge).

* Params: `mode: "minimal" | "verbose"`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setunreadindicatormode)

### Toggle Comment Types

#### enableAreaComment()

Enable area comments that allow drawing rectangles with comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableareacomment)

#### enableInboxMode()

Enable inbox mode for comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableinboxmode)

#### enablePopoverMode()

Enable popover mode for comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepopovermode)

#### enableStreamMode()

Enable stream mode for comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablestreammode)

#### enableTextMode()

Enable text mode for comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabletextmode)

#### enableInlineCommentMode()

Enable inline comment mode to show comments under associated text.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableinlinecommentmode)

#### enableMultithread()

Enable multithreaded comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablemultithread)

### Comment Bubble

#### enableGroupMatchedComments()

Enable grouping of multiple comment annotations in Comment Bubble component when multiple annotations match the provided `context` or `targetElementId`.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#groupMatchedComments)

### Comment Tool

#### enableCommentMode()

Enable comment mode to allow attaching comments to DOM elements.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecommentmode)

#### onCommentModeChange()

Subscribe to changes in comment mode state.

* Params: none
* Returns: `Observable<boolean>`
* React Hook: `useCommentModeState()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#oncommentmodechange)

#### enableCommentTool()

Enable/disable the comment tool button.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablecommenttool)

#### enableChangeDetectionInCommentMode()

Enable DOM change detection while in comment mode.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablechangedetectionincommentmode)

#### enablePersistentCommentMode()

Enable persistent comment mode to continue leaving comments after finishing one.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepersistentcommentmode)

#### enableForceCloseAllOnEsc()

Force close persistent comment mode when ESC key is pressed, even if a comment thread is active.

* Params: none
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#forcecloseallonesc)

#### disableForceCloseAllOnEsc()

Disable force close behavior for persistent comment mode when ESC key is pressed.

* Params: none
* Returns: `void`
* React Hook: `useCommentUtils()`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#forcecloseallonesc)

#### setPinCursorImage()

Set custom cursor image for comment mode.

* Params: `base64ImageString: string`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setpincursorimage)

### Minimap

#### enableMinimap()

Enable minimap showing comment locations on screen edge.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enableminimap)

### Popover Comments

#### enableDialogOnTargetElementClick()

Enable opening comment dialog on target element click in popover mode.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enabledialogontargetelementclick)

#### enablePopoverTriangleComponent()

Enable triangle indicator on popover comments.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablepoovertrianglecomponent)

### Video Timeline Comments

#### setTotalMediaLength()

Set the total length of media (in frames or seconds) for the timeline.

* Params: `length: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#settotalmediallength)

### Comment Pin

#### enableBubbleOnPin()

Show a Comment Bubble when hovering/clicking on Comment Pin instead of Comment Dialog.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablebubbleonpin)

#### enableBubbleOnPinHover()

Show Comment Bubble on hover vs click for Comment Pins.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#enablebubbleonpinhover)

### Component Props

#### VeltComments

Props accepted by the `VeltComments` root component, including edit-mode placeholder overrides. Setting props here propagates to all comment dialogs automatically.

* Params: [`VeltCommentsProps`](/api-reference/sdk/models/data-models#veltcommentsprops)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior)

#### VeltCommentDialog

Props accepted by the `VeltCommentDialog` component, including edit-mode placeholder overrides.

* Params: [`VeltCommentDialogProps`](/api-reference/sdk/models/data-models#veltcommentdialogprops)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior)

#### VeltCommentsSidebar

Props accepted by the `VeltCommentsSidebar` component, including edit-mode placeholder overrides.

* Params: [`VeltCommentsSidebarProps`](/api-reference/sdk/models/data-models#veltcommentssidebarprops)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior)

#### VeltInlineCommentsSection

Props accepted by the `VeltInlineCommentsSection` component, including edit-mode placeholder overrides.

* Params: [`VeltInlineCommentsSectionProps`](/api-reference/sdk/models/data-models#veltinlinecommentssectionprops)
* Returns: `N/A`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior)

# Comments Sidebar

### Custom filtering, sorting and grouping

#### enableSidebarCustomActions()

Enable custom filtering, sorting and grouping actions in the comments sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#custom-filtering-sorting-and-grouping)

#### setCommentSidebarData()

Set filtered/sorted/grouped data in the comments sidebar.

* Params: `data: CommentSidebarData[], options?: {grouping?: boolean}`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#custom-filtering-sorting-and-grouping)

### Navigation

#### onCommentClick()

Listen for comment click events in the sidebar.

* Params: `(event: {documentId: string, location: Object, targetElementId: string, context: Object, annotation: CommentAnnotation}) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#oncommentclick)

#### enableSidebarUrlNavigation()

Enable automatic URL navigation when clicking comments in the sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#enablesidebarurlnavigation)

### UI

#### openCommentSidebar()

Open the comments sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#opencommentsidebar)

#### closeCommentSidebar()

Close the comments sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#openCommentSidebar)

#### toggleCommentSidebar()

Toggle the comments sidebar open/closed state.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#togglecommentsidebar)

#### enableFullScreenInSidebar()

Enable full-screen mode for the Comments Sidebar (only works in default mode).

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#fullscreen)

#### disableFullScreenInSidebar()

Disable full-screen mode for the Comments Sidebar.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#fullscreen)

#### excludeLocationIdsFromSidebar()

Filter out comments from specified locations in the sidebar.

* Params: `locationIds: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#excludelocationidsfromsidebar)

### System Filters, Sorting and Grouping

#### setCommentSidebarFilters()

Set filters for the comments sidebar programmatically.

* Params: `filters: {location?: {id: string}[], people?: ({userId: string} | {email: string})[], priority?: string[], status?: string[], category?: string[]}`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments-sidebar/customize-behavior#setcommentsidebarfilters)

# Notifications

### Data

#### getNotificationsData()

Get the notifications data for the current user.

* Params:
  * query: Optional. [`GetNotificationsDataQuery`](/api-reference/sdk/models/data-models#getnotificationsdataquery)
    * `type`: Filter for notification type: all, for you, or documents.
      * `forYou`: returns notifications where the current user is involved.
      * `all` / `documents`: returns all notifications from the documents the user has access to.
* Returns: `Observable<Notification[]>`
* React Hook: `useNotificationsData()`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#getnotificationsdata)

#### getUnreadNotificationsCount()

Get count of unread notifications by tab.

* Params: none
* Returns: `Observable<{forYou: number, all: number}>`
* React Hook: `useUnreadNotificationsCount()`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#getunreadnotificationscount)

### Event Subscription

#### on()

Subscribe to Notification events.

* Params: `NotificationEventType`. [Here](/api-reference/sdk/models/data-models#notification) is the list of events you can subscribe to.
* Returns: `Observable<NotificationEventTypesMap[T]>`. [Here](/api-reference/sdk/models/data-models#notification) is the list of events object types you can expect to receive.
* React Hook: `useNotificationEventCallback(NotificationEventType)`

#### onNotificationClick()

Listen for notification click events in the Notifications Panel.

* Params: `(notification: Notification) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#onnotificationclick)

### Configuration

#### setTabConfig()

Customize notification tab names and visibility.

* Params: `tabConfig: TabConfig`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#settabconfig)

#### setMaxDays()

Set maximum age in days for displayed notifications.

* Params: `days: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#setmaxdays)

#### enableReadNotificationsOnForYouTab()

Show read notifications in the "For You" tab.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#enablereadnotificationsontheforyoutab)

### Actions

#### setAllNotificationsAsRead()

Mark all notifications as read globally or by tab.

* Params: `options?: {tabId?: string}`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#setallnotificationsasread)

#### markNotificationAsReadById()

Mark a specific notification as read.

* Params: `notificationId: string`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#marknotificationasreadbyid)

### Notification Settings

#### enableSettings()

Enable or disable the settings feature for notifications.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#enablesettings)

#### disableSettings()

Disable the settings feature for notifications.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#enablesettings)

#### enableSettingsAtOrganizationLevel()

Enable organization-level notification settings. Settings apply to all documents in the organization instead of per-document.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#enablesettingsatorganizationlevel)

#### disableSettingsAtOrganizationLevel()

Disable organization-level notification settings. Settings revert to per-document configuration.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#disablesettingsatorganizationlevel)

#### setSettingsInitialConfig()

Set the initial default configuration for notification settings.

* Params: [`NotificationInitialSettingsConfig[]`](/api-reference/sdk/models/data-models#notificationinitialsettingsconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#setsettingsinitialconfig)

#### muteAllNotifications()

Mute all notifications across all channels for the current user.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#muteallnotifications)

#### setSettings()

Update notification settings configuration for the current user.

* Params: [`NotificationSettingsConfig`](/api-reference/sdk/models/data-models#notificationsettingsconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#setsettings)

#### getSettings()

Get the current notification settings configuration for the user.

* Params: none
* Returns: [`Observable<NotificationSettingsConfig>`](/api-reference/sdk/models/data-models#notificationsettingsconfig)
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#getsettings)

#### enableCurrentDocumentOnly()

Filters notifications to show only those from the current document.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#enablecurrentdocumentonly)

#### disableCurrentDocumentOnly()

Shows notifications from all documents, not just the current document.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/notifications/customize-behavior#disablecurrentdocumentonly)

# Activity Logs

### Data

#### getAllActivities()

Subscribe to the real-time activity log feed, optionally filtered by document, feature type, or action type.

* Params: `config?:` [`ActivitySubscribeConfig`](/api-reference/sdk/models/data-models#activitysubscribeconfig)
* Returns: `Observable<ActivityRecord[] | null>`
* React Hook: `useAllActivities(config?)`
* [Full Documentation →](/async-collaboration/activity/customize-behavior#getallactivities)

### Actions

#### createActivity()

Create a custom activity log record for non-Velt events.

* Params: `data:` [`CreateActivityData`](/api-reference/sdk/models/data-models#createactivitydata) — `targetEntityId` is required only when `featureType` is `'custom'`; it is optional for `comment`, `reaction`, `recorder`, and `crdt`.
* Returns: `Promise<void>`
* React Hook: `useActivityUtils()` (access via `activityElement?.createActivity(data)`)
* [Full Documentation →](/async-collaboration/activity/customize-behavior#createactivity)

### Element Access

#### getActivityElement()

Get the ActivityElement instance from the Velt client.

* Params: none
* Returns: `ActivityElement`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/activity/setup)

### React Hooks

#### useAllActivities()

React Hook to subscribe to the activity log feed with optional filtering.

* Params: `config?:` [`ActivitySubscribeConfig`](/api-reference/sdk/models/data-models#activitysubscribeconfig)
* Returns: [`ActivityRecord[]`](/api-reference/sdk/models/data-models#activityrecord) `| null`
* React Hook: Yes
* [Full Documentation →](/async-collaboration/activity/customize-behavior#getallactivities)

#### useActivityUtils()

React Hook to access ActivityElement utility methods such as `createActivity()`.

* Params: none
* Returns: `ActivityElement | null`
* React Hook: Yes
* [Full Documentation →](/async-collaboration/activity/customize-behavior#createactivity)

# Recorder

#### downloadLatestVideo()

Downloads the latest version of a recording.

* Params: `recorderId: string`
* Returns: `Promise<boolean>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#downloadlatestvideo)

#### enableRecordingCountdown()

Controls whether to display a countdown timer before a recording starts.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#enablerecordingcountdown)

#### enableRecordingTranscription()

Controls whether to enable AI transcription for recordings.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#enablerecordingtranscription)

#### fetchRecordings()

Fetches recording data.

* Params: [RecorderRequestQuery](/api-reference/sdk/models/data-models#recorderrequestquery)
* Returns: [`Promise<GetRecordingDataResponse>`](/api-reference/sdk/models/data-models#getrecordingdataresponse)
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#getrecordingdata)

### RecorderElement Methods

#### setMaxLength()

Sets the maximum recording duration in seconds.

* Params: `value: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#setmaxlength)

#### enablePictureInPicture()

Enables Picture-in-Picture mode for recordings.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#enablepictureinpicture)

#### disablePictureInPicture()

Disables Picture-in-Picture mode for recordings.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#disablepictureinpicture)

#### openPictureInPicture()

Opens the Picture-in-Picture window for the current recording.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#openpictureinpicture)

#### exitPictureInPicture()

Exits the Picture-in-Picture window.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#exitpictureinpicture)

#### requestScreenPermission()

Requests screen capture permissions for recording preview.

* Params: none
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#requestscreenpermission)

#### enablePlaybackOnPreviewClick()

Enables click-to-play/pause functionality on recording preview thumbnails.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#playbackonpreviewclick)

#### disablePlaybackOnPreviewClick()

Disables click-to-play/pause functionality on recording preview thumbnails.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#playbackonpreviewclick)

### Event Subscription

#### on()

Subscribe to Recorder events.

* Params: `RecorderEventType`. [Here](/api-reference/sdk/models/data-models#recorder) is the list of events you can subscribe to.
* Returns: `Observable<RecorderEventTypesMap[T]>`. [Here](/api-reference/sdk/models/data-models#recorder) is the list of events object types you can expect to receive.
* React Hook: `useRecorderEventCallback(RecorderEventType)`
* [Full Documentation →](/async-collaboration/recorder/customize-behavior#on)

# Inline Reactions

#### setCustomReactions()

Set custom reaction emojis for inline reactions.

* Params: `customReactions: { [reactionId: string]: { url?: string, emoji?: string } }`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/reactions/customize-behavior#setcustomreactions)

# View Analytics

#### getUniqueViewsByUser()

Get unique views by user, optionally filtered by location.

* Params: `locationId?: string`
* Returns: `Observable<ViewsByUser[]>`
* React Hook: `useUniqueViewsByUser()`
* [Full Documentation →](/async-collaboration/view-analytics/customize-behavior#getuniqueviewsbyuser)

#### getUniqueViewsByDate()

Get unique views by date, optionally filtered by location.

* Params: `locationId?: string`
* Returns: `Observable<ViewsByDate[]>`
* React Hook: `useUniqueViewsByDate()`
* [Full Documentation →](/async-collaboration/view-analytics/customize-behavior#getuniqueviewsbydate)

# Live State Sync

#### getLiveStateData()

Retrieves live state data as an observable based on the provided ID.

* Params: `liveStateDataId?: string`
* Returns: `Observable<any>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-state-sync/setup)

#### setLiveStateData()

Sets live state data for the provided ID and data.

* Params:
  * `liveStateDataId`: `string`
  * `liveStateData`: `any`
  * `config`: `SetLiveStateDataConfig`
* Returns: `any`
* React Hook: `useSetLiveStateData()`
* [Full Documentation →](/realtime-collaboration/live-state-sync/setup)

#### fetchLiveStateData()

Fetches live state data as a Promise. Use this when you need to retrieve the current state once, rather than subscribing to ongoing changes.

* Params: `request?:` [FetchLiveStateDataRequest](/api-reference/sdk/models/data-models#fetchlivestatedatarequest) - Optional. If not provided or if liveStateDataId is not specified, all live state data will be returned.
* Returns: `Promise<T>` - Generic type support allows you to specify the expected data type
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-state-sync/setup#fetch-live-data)

# Single Editor Mode

#### enableSingleEditorMode()

Enables the single editor mode with an optional configuration.

* Params: `config?: SingleEditorConfig`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### disableSingleEditorMode()

Disables the single editor mode.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### isUserEditor()

Checks if the current user is an editor. Returns an observable.

* Params: none
* Returns: `Observable<UserEditorAccess | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### getEditor()

Retrieves the current editor information.

* Params: none
* Returns: `Observable<User | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### setUserAsEditor()

Sets the current user as an editor.

* Params: none
* Returns: `Promise<SetUserAsEditorResponse | void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/customize-behavior#setuseraseditor)

Possible error codes returned in `SetUserAsEditorResponse.error`:

* `same_user_editor_current_tab`
* `same_user_editor_different_tab`
* `another_user_editor`

See types: [SetUserAsEditorResponse](/api-reference/sdk/models/data-models#setuseraseditorresponse), [ErrorEvent](/api-reference/sdk/models/data-models#errorevent)

#### resetUserAccess()

Resets the user access.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### singleEditorModeContainerIds()

Disables elements inside specific elements only when single editor mode is on.

* Params: `elementIds: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### enableAutoSyncState()

Enables the autosync state feature.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### requestEditorAccess()

Initiates a request for editor access.

* Params: none
* Returns: `Observable<boolean | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### isEditorAccessRequested()

Checks if editor access has been requested.

* Params: none
* Returns: `Observable<{ requestStatus: string, requestedBy: User } | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### acceptEditorAccessRequest()

Accepts an editor access request.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### rejectEditorAccessRequest()

Rejects an editor access request.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### cancelEditorAccessRequest()

Cancels an editor access request.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### editCurrentTab()

Edits the current tab.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### setEditorAccessTimeout()

Sets a timeout for editor access. (in milliseconds)

* Params: `timeout: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### enableEditorAccessTransferOnTimeOut()

Enables the transfer of editor access on timeout.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### enableDefaultSingleEditorUI()

Enables the default UI for single editor mode.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/setup)

#### enableHeartbeat()

Enables the heartbeat mechanism for Single Editor Mode presence detection. This feature is enabled by default when single editor mode is enabled.

* Params: `void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/customize-behavior#heartbeat)

#### disableHeartbeat()

Disables the heartbeat mechanism for Single Editor Mode presence detection. Must be called before enabling single editor mode if you don't want to use the heartbeat functionality.

* Params: `void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/customize-behavior#heartbeat)

# Cursors

#### setInactivityTime()

Set the time it takes for a user's cursor to be marked as inactive.

* Params: `milliseconds: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/cursors/customize-behavior#setinactivitytime)

#### allowedElementIds()

Set specific element IDs where cursors should be shown.

* Params: `elementIds: string[]`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/cursors/customize-behavior#allowedelementids)

#### onCursorUserChange()

Subscribe to cursor position changes for all users.

* Params: `callback: (cursorUsers: CursorUser[]) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/cursors/customize-behavior#oncursoruserchange)

# Presence

#### updateUserPresence()

Send a lightweight heartbeat from your host app to Velt. Velt will use that as a fallback in rare edge cases if it fails to detect multi‑tab/device presence. Most apps don’t need this; use only if you see ambiguity in who’s the active editor.

* Params: `userPresence: LiveStateSingleEditorExternalUserPresence`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/single-editor-mode/customize-behavior#updateuserpresence)
  See types: [LiveStateSingleEditorExternalUserPresence](/api-reference/sdk/models/data-models#livestatesingleeditorexternaluserpresence)

Set the time it takes for a user to be marked as inactive.

* Params: `milliseconds: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#setinactivitytime)

#### enableSelf()

Include the current user in the list of presence users.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#self)

#### on()

Subscribe to Presence events.

* Params: `PresenceEventType`. [Here](/api-reference/sdk/models/data-models#presence) is the list of events you can subscribe to.
* Returns: `Observable<PresenceEventTypesMap[T]>`. [Here](/api-reference/sdk/models/data-models#presence) is the list of events object types you can expect to receive.
* React Hook: `usePresenceEventCallback(PresenceEventType)`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#on)

#### onPresenceUserChange()

Subscribe to presence changes for all users.

* Params: `callback: (presenceUsers: PresenceUser[]) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#onpresenceuserchange)

#### onPresenceUserClick()

Handle click events on presence avatar circles.

* Params: `callback: (user: User) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#onpresenceuserclick)

#### getData()

Subscribe to presence data.

* Params: `PresenceRequestQuery`
* Returns: `Observable<GetPresenceDataResponse>`
* React Hook: `usePresenceData()`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#getdata)

#### addUser()

Programmatically add a custom user (e.g., AI agent, bot) to the presence list. Set `localOnly: true` to restrict the change to the current client without persisting to the database.

* Params: `{ user: Partial<`[`PresenceUser`](/api-reference/sdk/models/data-models#presenceuser)`>, localOnly?: boolean }`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#adduser)

#### removeUser()

Programmatically remove a custom user from the presence list. Set `localOnly: true` to restrict the removal to the current client.

* Params: `{ user: Partial<`[`PresenceUser`](/api-reference/sdk/models/data-models#presenceuser)`>, localOnly?: boolean }`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#removeuser)

# Follow Mode

#### enableFlockMode()

Enable Follow Me mode globally wherever Presence is shown.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/presence/customize-behavior#flockmode)

#### startFollowingUser()

Start following a specific user.

* Params: `userId: string`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/flock-mode/customize-behavior#startfollowinguser)

#### stopFollowingUser()

Stop following the current user.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/flock-mode/customize-behavior#stopfollowinguser)

#### onNavigate()

Handle navigation events during Follow Me sessions.

* Params: `callback: (pageInfo: PageInfo) => void`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/flock-mode/customize-behavior#onnavigate)

# Huddle

#### enableChat()

Enable the ephemeral chat feature in Huddle.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/huddle/customize-behavior#chat)

#### enableFlockModeOnAvatarClick()

Enable Follow Me mode when clicking on a user's avatar in Huddle.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/huddle/customize-behavior#flockmodedonavatarclick)

# Live Selection

#### enableDefaultElementsTracking()

Enable automatic tracking of user presence on default element types (input, textarea, button, contenteditable).

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#enabledefaultelementstracking)

#### enableUserIndicator()

Enable the user indicator (avatar/name label) that appears near selected elements.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#enableuserindicator)

#### setUserIndicatorPosition()

Set the position of the user indicator globally.

* Params: `position: 'start' | 'end'`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#setuserindicatorposition)

#### setUserIndicatorType()

Set the type of user indicator globally.

* Params: `type: 'avatar' | 'label'`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#setuserindicatortype)

#### getLiveSelectionData()

Get the live selection data for the current document.

* Params: `none`
* Returns: `Observable<LiveSelectionData>`
* React Hook: `useLiveSelectionDataHandler()`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#getliveselectiondata)

#### setInactivityTime()

Set inactivity duration before hiding inactive selections.

* Params: `milliseconds: number`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/live-selection/customize-behavior#setinactivitytime)

# AI

### Rewriter

#### enableRewriter()

Enable the rewriter.

* Params: `n/a`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/setup#step-1-enable-rewriter)

#### on()

Subscribe to Rewriter events. Supports `'textSelected'` to receive [`TextSelectedEvent`](/api-reference/sdk/models/data-models#textselectedevent) whenever a user selects text in a Rewriter-enabled region.

* Params: `action: 'textSelected'`
* Returns: `Observable<`[`TextSelectedEvent`](/api-reference/sdk/models/data-models#textselectedevent)`>`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/setup#step-2-subscribe-to-text-selection-events)

#### askAi()

Send a text-generation prompt to any AI model via Velt's proxy. Model is resolved from the name prefix to the configured provider.

* Params: [`RewriterAskAiRequest`](/api-reference/sdk/models/data-models#rewriteraskairequest)
* Returns: `Promise<`[`RewriterAskAiResponse`](/api-reference/sdk/models/data-models#rewriteraskairesponse)`>`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/setup#step-3-send-a-prompt-to-ai)

#### replaceText()

Replace the DOM text identified by a [`TextSelectedEvent`](/api-reference/sdk/models/data-models#textselectedevent) with new text.

* Params: [`RewriterReplaceTextRequest`](/api-reference/sdk/models/data-models#rewriterreplacetextrequest)
* Returns: `Promise<`[`RewriterReplaceTextResponse`](/api-reference/sdk/models/data-models#rewriterreplacetextresponse)`>`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/setup#step-4-take-action-on-the-returned-result)

#### addComment()

Create a comment annotation anchored to the text range from a [`TextSelectedEvent`](/api-reference/sdk/models/data-models#textselectedevent).

* Params: [`RewriterAddCommentRequest`](/api-reference/sdk/models/data-models#rewriteraddcommentrequest)
* Returns: `Promise<`[`RewriterAddCommentResponse`](/api-reference/sdk/models/data-models#rewriteraddcommentresponse)`>`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/setup#step-4-take-action-on-the-returned-result)

#### enableDefaultUI()

Show the built-in Velt rewriter toolbar on text selection. This is the default state.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/customize-behavior#enabledefaultui--disabledefaultui)

#### disableDefaultUI()

Hide the built-in Velt rewriter toolbar; custom UI only. Rewriter events remain active.

* Params: none
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/ai/rewriter/customize-behavior#enabledefaultui--disabledefaultui)

# ReactFlow

#### [useVeltReactFlowCrdtExtension()](/api-reference/sdk/api/api-methods#useveltreactflowcrdtextension)

Provides real-time collaborative ReactFlow editor functionality with Yjs and Velt SDK synchronization.

* Signature: useVeltReactFlowCrdtExtension(config: VeltReactFlowCrdtExtensionConfig)
* Params: [VeltReactFlowCrdtExtensionConfig](/api-reference/sdk/models/data-models#veltreactflowcrdtextensionconfig)
* Returns: [VeltReactFlowCrdtExtensionResponse](/api-reference/sdk/models/data-models#veltreactflowcrdtextensionresponse)
* React Hook: `useVeltReactFlowCrdtExtension()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#useveltreactflowcrdtextension)

#### veltReactFlowStore

Create and initialize a collaborative React Flow Zustand store.

* Params: [VeltReactFlowStoreConfig](/api-reference/sdk/models/data-models#veltreactflowstoreconfig)
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

#### onNodesChange

CRDT-aware handler to apply node changes (add/update/remove) that sync across collaborators.

* Params: [NodeChange\[\]](/api-reference/sdk/models/data-models#nodechange)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

#### onEdgesChange

CRDT-aware handler to apply edge changes (add/update/remove) that sync across collaborators.

* Params: [EdgeChange\[\]](/api-reference/sdk/models/data-models#edgechange)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

#### onConnect

CRDT-aware connect handler compatible with React Flow’s `onConnect` prop.

* Params: [Connection](/api-reference/sdk/models/data-models#connection)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

#### setNodes

Imperative setter for nodes (useful for non-event updates). Synced via the store.

* Params: [Node\[\]](/api-reference/sdk/models/data-models#node-react-flow) | ((prev: [Node\[\]](/api-reference/sdk/models/data-models#node-react-flow)) => [Node\[\]](/api-reference/sdk/models/data-models#node-react-flow))
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

#### setEdges

Imperative setter for edges (useful for non-event updates). Synced via the store.

* Params: [Edge\[\]](/api-reference/sdk/models/data-models#edge-react-flow) | ((prev: [Edge\[\]](/api-reference/sdk/models/data-models#edge-react-flow)) => [Edge\[\]](/api-reference/sdk/models/data-models#edge-react-flow))
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/reactflow#apis)

# Encryption

#### setEncryptionProvider(encryptionProvider)

Register a custom encrypt/decrypt provider used by CRDT features.

* Params: `VeltEncryptionProvider`
* Returns: `void`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#encryption)

# CodeMirror

## v2 API

#### [useCollaboration()](/api-reference/sdk/api/api-methods#codemirror-usecollaboration)

Primary React hook for collaborative CodeMirror editing. Creates a CollaborationManager, initializes the CRDT store, and returns collaboration primitives for CodeMirror integration.

* Signature: `useCollaboration(config: UseCollaborationConfig)`
* Params: [UseCollaborationConfig](/api-reference/sdk/models/data-models#usecollaborationconfig-codemirror)
* Returns: [UseCollaborationReturn](/api-reference/sdk/models/data-models#usecollaborationreturn-codemirror)
* React Hook: `useCollaboration()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#react-usecollaboration)

#### [createCollaboration()](/api-reference/sdk/api/api-methods#codemirror-createcollaboration)

Non-React factory function that creates a CollaborationManager for CodeMirror, initializes the CRDT store, and returns a ready-to-use instance.

* Signature: `createCollaboration(config: CollaborationConfig): Promise<CollaborationManager>`
* Params: [CollaborationConfig](/api-reference/sdk/models/data-models#collaborationconfig-codemirror)
* Returns: `Promise<CollaborationManager>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#non-react-createcollaboration)

## CollaborationManager Methods

The `CollaborationManager` is returned by `useCollaboration` (React) via the `manager` property, or directly by `createCollaboration` (non-React). All methods below work in both contexts.

#### manager.getCollaborationPrimitives()

Returns the Yjs primitives (`ytext`, `awareness`, `undoManager`, `doc`) needed to call `yCollab()`. Non-React only — the React hook returns `primitives` directly.

* Params: `none`
* Returns: `CollaborationPrimitives`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetcollaborationprimitives)

#### manager.onStatusChange()

Subscribe to connection status changes. Non-React only — the React hook returns `status` directly.

* Params: `callback: (status: SyncStatus) => void`
* Returns: `Unsubscribe`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#manageronstatuschange)

#### manager.onSynced()

Subscribe to sync state changes. Non-React only — the React hook returns `isSynced` directly.

* Params: `callback: (synced: boolean) => void`
* Returns: `Unsubscribe`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#manageronsynced)

#### manager.initialized

Whether initialization has completed.

* Returns: `boolean`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managerinitialized)

#### manager.synced

Whether initial sync with the backend has completed.

* Returns: `boolean`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managersynced)

#### manager.status

Current connection status.

* Returns: `SyncStatus`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managerstatus)

#### manager.saveVersion()

Save a named snapshot of the document state. Returns the version ID.

* Params: `name: string`
* Returns: `Promise<string>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managersaveversion)

#### manager.getVersions()

List all saved versions.

* Params: `none`
* Returns: `Promise<Version[]>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetversions)

#### manager.restoreVersion()

Restore to a saved version. Returns `true` on success.

* Params: `versionId: string`
* Returns: `Promise<boolean>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managerrestoreversion)

#### manager.setStateFromVersion()

Apply a Version object's state locally to the current document.

* Params: `version: Version`
* Returns: `Promise<void>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managersetstatefromversion)

#### manager.getDoc()

Get the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetdoc)

#### manager.getText() / manager.getYText()

Get the Y.Text bound to the document content. React uses `getText()`, non-React uses `getYText()`.

* Params: `none`
* Returns: `Y.Text | null`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergettext--managergetytext)

#### manager.getProvider()

Get the sync provider.

* Params: `none`
* Returns: `SyncProvider`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetprovider)

#### manager.getAwareness()

Get the Yjs Awareness instance.

* Params: `none`
* Returns: `Awareness`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetawareness)

#### manager.getStore()

Get the core CRDT Store.

* Params: `none`
* Returns: `Store<string>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetstore)

#### manager.getUndoManager()

Get the Y.UndoManager for undo/redo operations.

* Params: `none`
* Returns: `Y.UndoManager | null`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managergetundomanager)

#### manager.destroy()

Full cleanup. Automatic on editor destroy or component unmount. Safe to call multiple times.

* Params: `none`
* Returns: `void`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#managerdestroy)

## v1 API (deprecated)

<Warning>The v1 API is deprecated. Use `useCollaboration()` (React) or `createCollaboration()` (non-React) for all new integrations.</Warning>

#### useVeltCodeMirrorCrdtExtension() (deprecated)

Legacy React hook for collaborative CodeMirror editing. Internally delegates to `useCollaboration` via a compatibility wrapper.

* Signature: `useVeltCodeMirrorCrdtExtension(config: VeltCodeMirrorCrdtExtensionConfig)`
* Params: [VeltCodeMirrorCrdtExtensionConfig](/api-reference/sdk/models/data-models#veltcodemirrorcrdtextensionconfig-deprecated)
* Returns: [VeltCodeMirrorCrdtExtensionResponse](/api-reference/sdk/models/data-models#veltcodemirrorcrdtextensionresponse-deprecated)
* React Hook: `useVeltCodeMirrorCrdtExtension()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#react-useveltcodemirrorcrdtextension-deprecated)

#### createVeltCodeMirrorCrdtExtension() (deprecated)

Legacy non-React function for collaborative CodeMirror editing using a callback-based pattern.

* Signature: `createVeltCodeMirrorCrdtExtension(config: VeltCodeMirrorStoreConfig, onReady: callback): () => void`
* Params: [VeltCodeMirrorStoreConfig](/api-reference/sdk/models/data-models#veltcodemirrorstoreconfig-deprecated)
* Returns: `() => void` (cleanup function)
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#non-react-createveltcodemirrorcrdtextension-deprecated)

#### createVeltCodeMirrorStore() (deprecated)

Legacy factory to create and initialize a collaborative CodeMirror store instance.

* Params: `config: VeltCodeMirrorStoreConfig`
* Returns: `Promise<VeltCodeMirrorStore | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.getStore() (deprecated)

Get the underlying Store that manages state and synchronization.

* Params: `none`
* Returns: `Store<string>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.getYDoc() (deprecated)

Access the Yjs document used for collaborative editing.

* Params: `none`
* Returns: `Y.Doc`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.getYText() (deprecated)

Get the shared Y.Text bound to the current CodeMirror document.

* Params: `none`
* Returns: `Y.Text | null`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.getAwareness() (deprecated)

Access the Yjs Awareness instance associated with the store.

* Params: `none`
* Returns: `Awareness`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.getUndoManager() (deprecated)

Access the Yjs UndoManager for collaborative undo/redo.

* Params: `none`
* Returns: `Y.UndoManager`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

#### store.destroy() (deprecated)

Clean up listeners and release resources.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/codemirror#legacy-api-v1)

# BlockNote

## v2 API

#### useCollaboration()

Primary React hook for collaborative BlockNote editing. Creates a CollaborationManager, initializes the CRDT store, and returns a BlockNoteCollaborationConfig with cursor support.

* Signature: `useCollaboration(config: UseCollaborationConfig)`
* Params: [UseCollaborationConfig](/api-reference/sdk/models/data-models#usecollaborationconfig-blocknote)
* Returns: [UseCollaborationReturn](/api-reference/sdk/models/data-models#usecollaborationreturn-blocknote)
* React Hook: `useCollaboration()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#react-usecollaboration)

#### manager.getCollaborationConfig()

Get the BlockNote collaboration config.

* Params: `none`
* Returns: `BlockNoteCollaborationConfig | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetcollaborationconfig)

#### manager.saveVersion()

Save a named snapshot of the document state.

* Params: `name: string`
* Returns: `Promise<string>` (version ID, or empty string on failure)
* React Hook: `n/a` (also available as first-class `saveVersion` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managersaveversion)

#### manager.getVersions()

List all saved versions for this document.

* Params: `none`
* Returns: `Promise<Version[]>` (empty array on failure)
* React Hook: `n/a` (also available as first-class `getVersions` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetversions)

#### manager.restoreVersion()

Restore the document to a previously saved version. The restored state is pushed to all connected clients.

* Params: `versionId: string`
* Returns: `Promise<boolean>` (`true` on success, `false` on failure)
* React Hook: `n/a` (also available as first-class `restoreVersion` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managerrestoreversion)

#### manager.setStateFromVersion()

Apply a Version object's state locally to the current document.

* Params: `version: Version`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managersetstatefromversion)

#### manager.getDoc()

Get the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetdoc)

#### manager.getXmlFragment()

Get the XmlFragment bound to BlockNote's document-store key.

* Params: `none`
* Returns: `Y.XmlFragment | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetxmlfragment)

#### manager.getProvider()

Get the sync provider.

* Params: `none`
* Returns: `SyncProvider | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetprovider)

#### manager.getAwareness()

Get the Yjs Awareness instance.

* Params: `none`
* Returns: `Awareness | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetawareness)

#### manager.getStore()

Get the core CRDT Store.

* Params: `none`
* Returns: `Store<string> | null`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetstore)

#### manager.destroy()

Full cleanup of the CollaborationManager (automatic on unmount).

* Params: `none`
* Returns: `void`
* React Hook: `n/a` (accessed via `manager` from `useCollaboration`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managerdestroy)

## Non-React v2 API

#### createCollaboration()

Factory function that creates a CollaborationManager for BlockNote, initializes the CRDT store, and returns a ready-to-use instance.

* Signature: `createCollaboration(config: CollaborationConfig): Promise<CollaborationManager>`
* Params: [CollaborationConfig](/api-reference/sdk/models/data-models#collaborationconfig-blocknote)
* Returns: `Promise<CollaborationManager>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#non-react-createcollaboration)

#### manager.getCollaborationConfig()

Returns the BlockNote collaboration config. Pass to `BlockNoteEditor.create({ collaboration: ... })`.

* Params: `options?: { showCursorLabels?: 'activity' | 'always' }`
* Returns: `BlockNoteCollaborationConfig | null`
* React Hook: `n/a` (React hook returns `collaborationConfig` directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managergetcollaborationconfig)

#### manager.onStatusChange()

Subscribe to connection status changes.

* Params: `callback: (status: SyncStatus) => void`
* Returns: `Unsubscribe`
* React Hook: `n/a` (React hook returns `status` directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#manageronstatuschange)

#### manager.onSynced()

Subscribe to sync state changes.

* Params: `callback: (synced: boolean) => void`
* Returns: `Unsubscribe`
* React Hook: `n/a` (React hook returns `isSynced` directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#manageronsynced)

#### manager.initialized

Whether initialization has completed.

* Returns: `boolean`
* React Hook: `n/a` (React hook returns `isLoading`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managerinitialized)

#### manager.synced

Whether initial sync with the backend has completed.

* Returns: `boolean`
* React Hook: `n/a` (React hook returns `isSynced`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managersynced)

#### manager.status

Current connection status.

* Returns: `SyncStatus`
* React Hook: `n/a` (React hook returns `status`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#managerstatus)

## v1 API (deprecated)

<Warning>The v1 BlockNote API is deprecated. Use `useCollaboration()` (React) or `createCollaboration()` (non-React) for all new integrations.</Warning>

#### useVeltBlockNoteCrdtExtension() (deprecated)

Legacy React hook for collaborative BlockNote editing. Internally delegates to `useCollaboration` via a compatibility wrapper.

* Signature: `useVeltBlockNoteCrdtExtension(config: VeltBlockNoteCrdtExtensionConfig)`
* Params: [VeltBlockNoteCrdtExtensionConfig](/api-reference/sdk/models/data-models#veltblocknotecrdtextensionconfig-deprecated)
* Returns: [VeltBlockNoteCrdtExtensionResponse](/api-reference/sdk/models/data-models#veltblocknotecrdtextensionresponse-deprecated)
* React Hook: `useVeltBlockNoteCrdtExtension()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/blocknote#react-useveltblocknotecrdtextension-deprecated)

#### createVeltBlockNoteStore() (deprecated)

Create and initialize a legacy collaborative BlockNote store instance.

* Params: `VeltBlockNoteStoreConfig`
* Returns: `VeltBlockNoteStore | null`
* React Hook: `n/a`

#### store.getStore() (deprecated)

Access the underlying CRDT store.

* Params: `none`
* Returns: `Store`
* React Hook: `n/a`

#### store.getYDoc() (deprecated)

Accessor for the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc`
* React Hook: `n/a`

#### store.getYXml() (deprecated)

Get the Y.XmlFragment representing the BlockNote document tree.

* Params: `none`
* Returns: `Y.XmlFragment | null`
* React Hook: `n/a`

#### store.destroy() (deprecated)

Tear down the store and clean listeners/resources.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`

# Tiptap

## React v2 API

#### [useCollaboration()](/api-reference/sdk/api/api-methods#usecollaboration)

Primary React hook for collaborative TipTap editing. Creates a CollaborationManager, initializes the CRDT store, and returns a TipTap Extension with cursor support.

* Signature: `useCollaboration(config: UseCollaborationConfig)`
* Params: [UseCollaborationConfig](/api-reference/sdk/models/data-models#usecollaborationconfig)
* Returns: [UseCollaborationReturn](/api-reference/sdk/models/data-models#usecollaborationreturn)
* React Hook: `useCollaboration()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#react-usecollaboration)

## Non-React v2 API

#### [createCollaboration()](/api-reference/sdk/api/api-methods#createcollaboration)

Factory function that creates a CollaborationManager, initializes the CRDT store, and returns a ready-to-use instance.

* Signature: `createCollaboration(config: CollaborationConfig): Promise<CollaborationManager>`
* Params: [CollaborationConfig](/api-reference/sdk/models/data-models#collaborationconfig)
* Returns: `Promise<CollaborationManager>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#non-react-createcollaboration)

#### manager.createExtension()

Returns a single TipTap Extension that bundles Yjs document binding and remote cursor rendering. Non-React only — the React hook returns the extension directly.

* Params: `none`
* Returns: `Extension`
* React Hook: `n/a` (React hook returns extension directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managercreateextension)

## CollaborationManager Methods

Shared methods available on the `CollaborationManager` instance. In React, access via `manager` from the `useCollaboration` hook. In non-React, the manager is returned by `createCollaboration()`.

#### manager.onStatusChange()

Subscribe to connection status changes.

* Params: `callback: (status: SyncStatus) => void`
* Returns: `Unsubscribe`
* React Hook: `n/a` (React hook returns `status` directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#manageronstatuschange)

#### manager.onSynced()

Subscribe to sync state changes.

* Params: `callback: (synced: boolean) => void`
* Returns: `Unsubscribe`
* React Hook: `n/a` (React hook returns `isSynced` directly)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#manageronsynced)

#### manager.initialized

Whether initialization has completed.

* Returns: `boolean`
* React Hook: `n/a` (React hook returns `isLoading`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managerinitialized)

#### manager.synced

Whether initial sync with the backend has completed.

* Returns: `boolean`
* React Hook: `n/a` (React hook returns `isSynced`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managersynced)

#### manager.status

Current connection status.

* Returns: `SyncStatus`
* React Hook: `n/a` (React hook returns `status`)
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managerstatus)

#### manager.saveVersion()

Save a named snapshot of the document state. Returns the version ID.

* Params: `name: string`
* Returns: `Promise<string>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managersaveversion)

#### manager.getVersions()

List all saved versions.

* Params: `none`
* Returns: `Promise<Version[]>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetversions)

#### manager.restoreVersion()

Restore to a saved version. Returns `true` on success.

* Params: `versionId: string`
* Returns: `Promise<boolean>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managerrestoreversion)

#### manager.setStateFromVersion()

Apply a Version object's state locally to the current document.

* Params: `version: Version`
* Returns: `Promise<void>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managersetstatefromversion)

#### manager.getDoc()

Get the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetdoc)

#### manager.getXmlFragment()

Get the XmlFragment bound to TipTap content.

* Params: `none`
* Returns: `Y.XmlFragment | null`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetxmlfragment)

#### manager.getProvider()

Get the sync provider.

* Params: `none`
* Returns: `SyncProvider`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetprovider)

#### manager.getAwareness()

Get the Yjs Awareness instance.

* Params: `none`
* Returns: `Awareness`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetawareness)

#### manager.getStore()

Get the core CRDT Store from the CollaborationManager.

* Params: `none`
* Returns: `Store<string>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managergetstore)

#### manager.destroy()

Full cleanup of the CollaborationManager (automatic on unmount).

* Params: `none`
* Returns: `void`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#managerdestroy)

## v1 API (deprecated)

<Warning>The v1 API is deprecated. Use `useCollaboration()` (React) or `createCollaboration()` (non-React) for all new integrations.</Warning>

#### useVeltTiptapCrdtExtension() (deprecated)

Legacy React hook for collaborative Tiptap editing. Internally delegates to `useCollaboration` via a compatibility wrapper.

* Signature: `useVeltTiptapCrdtExtension(config: VeltTiptapCrdtExtensionConfig)`
* Params: [VeltTiptapCrdtExtensionConfig](/api-reference/sdk/models/data-models#velttiptapcrdtextensionconfig-deprecated)
* Returns: [VeltTiptapCrdtExtensionResponse](/api-reference/sdk/models/data-models#velttiptapcrdtextensionresponse-react-deprecated)
* React Hook: `useVeltTiptapCrdtExtension()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#react-usevelttiptapcrdtextension-deprecated)

#### createVeltTiptapCrdtExtension() (deprecated)

Legacy non-React function for collaborative Tiptap editing using a callback-based pattern.

* Signature: `createVeltTiptapCrdtExtension(config: VeltTipTapStoreConfig, onReady: callback): () => void`
* Params: [VeltTipTapStoreConfig](/api-reference/sdk/models/data-models#velttiptapstoreconfig-deprecated)
* Returns: `() => void` (cleanup function)
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#non-react-createvelttiptapcrdtextension-deprecated)

#### createVeltTipTapStore() (deprecated)

Legacy factory to create and initialize a collaborative Tiptap store instance.

* Params: `config: VeltTipTapStoreConfig`
* Returns: `Promise<VeltTipTapStore | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#legacy-api-v1)

#### store.getCollabExtension() (deprecated)

Get the Tiptap collaboration extension bound to the current Yjs document.

* Params: `none`
* Returns: `Extension`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

#### store.getStore() (deprecated)

Access the underlying CRDT store managing document state.

* Params: `none`
* Returns: `Store<string>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

#### store.destroy() (deprecated)

Tear down the store and clean up listeners/resources.

* Params: `none`
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

#### store.getYDoc() (deprecated)

Accessor for the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

#### store.getYXml() (deprecated)

Accessor for the XML fragment in the Yjs document.

* Params: `none`
* Returns: `Y.XmlFragment | null`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

#### store.setStateFromVersion() (deprecated)

Restores the document to a specific version state.

* Params: `version: Version`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/tiptap#velttiptapstore-methods-deprecated)

# Core

### Client

#### initConfig()

Set up initial configurations for the Velt SDK.

* Params: `apiKey: string, config?:` [`VeltProviderConfig`](/api-reference/sdk/models/data-models#veltproviderconfig)
* Returns: `void`
* React Hook: `n/a`

#### getVeltInitState()

Subscribe to detect whether Velt is initialized.

* Params: `void`
* Returns: `Observable<boolean>`
* React Hook: `useVeltInitState()`

#### get Velt Client

Access the core Velt client instance to call SDK APIs and subscribe to core events.

* Signature:
  * React: `const { client } = useVeltClient()`
  * Other frameworks: `const client = await initVelt(apiKey)`
  * HTML: `await Velt.init(apiKey)` then use `Velt`
* Params: `none` [Here](/get-started/advanced#client-event-subscriptions) is the list of events you can subscribe to.
* Returns: `Velt` [Here](/api-reference/sdk/models/data-models#client-events) is the list of events object types you can expect to receive.
* React Hook: `useVeltClient()`
* See event payloads: [Core data model](/api-reference/sdk/models/data-models##core-events)
* Overview: [Client Event Subscriptions](/get-started/advanced#client-event-subscriptions)

#### getMetadata()

Get the currently set organization, document and location objects.

* Params: none
* Returns: `Promise<VeltEventMetadata>`
* React Hook: `n/a`

#### getUserPermissions()

Get the current user's access roles across organization, folder, and document scopes.

* Params: [GetUserPermissionsRequest](/api-reference/sdk/models/data-models#getuserpermissionsrequest)
* Returns: [`Promise<GetUserPermissionsResponse>`](/api-reference/sdk/models/data-models#getuserpermissionsresponse)
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#access-control)

**Error handling:** On failure, the response includes an `errorCode` from the [UserPermissionAccessRoleResult](/api-reference/sdk/models/data-models#userpermissionaccessroleresult) enum:

* `does_not_exist`: Resource not found
* `permission_denied`: User lacks access to the resource
* `something_went_wrong`: Unexpected error

#### getCurrentUserPermissions()

Subscribe to current user permissions updates. Returns real-time permission changes for the authenticated user across organization, folder, and document scopes. Useful for debugging and developer tools integration.

* Params: `void`
* Returns: [`Observable<GetUserPermissionsResponse>`](/api-reference/sdk/models/data-models#getuserpermissionsresponse)
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#getcurrentuserpermissions)

#### getHeartbeat()

Subscribe to user-specific heartbeat data. Retrieve heartbeat data for the current user or specify a userId to monitor heartbeats for any user.

* Params: [`HeartbeatConfig`](/api-reference/sdk/models/data-models#heartbeatconfig) (optional)
* Returns: [`Observable<GetHeartbeatResponse>`](/api-reference/sdk/models/data-models#getheartbeatresponse)
* React Hook: `useHeartbeat()`

#### enableFirestorePersistentCache()

Enable Firestore offline persistence and multi-tab synchronization. Call before `identify()` to activate offline reads.

* Params: `config?: { ha?: boolean }`
* Returns: `void`
* React Hook: `n/a`

#### disableFirestorePersistentCache()

Disable Firestore offline persistence and revert to the default non-persistent mode.

* Params: `config?: { ha?: boolean }`
* Returns: `void`
* React Hook: `n/a`

### Authentication

#### identify()

Authenticate the client's user with the Velt SDK. When called with organization change, previous document is set unless `setDocuments()` is explicitly called.

* Params: `user: User, userOptions?: UserOptions`
* Returns: `Promise<unknown>`
* React Hook: `useIdentify()`

#### setPermissionProvider()

Configure Permission Provider for real-time access validation.

* Params: [`VeltPermissionProvider`](/api-reference/sdk/models/data-models#veltpermissionprovider)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#c-real-time-permission-provider)

#### signOutUser()

To sign out a user.

* Params: `void`
* Returns: `any`
* React Hook: `n/a`

#### getUser()

Get the current authenticated user in Velt.

* Params: `void`
* Returns: `User`
* React Hook: `n/a`

#### getCurrentUser()

Subscribe to changes in the current user object.

* Params: `void`
* Returns: `Observable<User | null>`
* React Hook: `useCurrentUser()`
* [Full Documentation →](/key-concepts/overview#get-current-user)

### Collaboration

#### v2 React API

#### [useStore()](/api-reference/sdk/api/api-methods#usestore)

React hook that creates and manages a CRDT store with reactive value, status, and version management.

* Params: [UseStoreConfig](/api-reference/sdk/models/data-models#usestoreconfig)
* Returns: [UseStoreReturn](/api-reference/sdk/models/data-models#usestorereturn)
* React Hook: `useStore()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#react-usestore)

#### [useAwareness()](/api-reference/sdk/api/api-methods#useawareness)

React hook for reactive Yjs Awareness state (remote peers and local state).

* Params: `store: Store<any> | null`
* Returns: [UseAwarenessReturn](/api-reference/sdk/models/data-models#useawarenessreturn)
* React Hook: `useAwareness()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#react-useawareness)

#### Non-React API

#### createVeltStore()

Create and initialize a collaborative CRDT store instance.

* Params: `StoreConfig<T>`
* Returns: `Promise<Store<T> | null>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#non-react-createveltstore)

#### Store Methods

#### update()

Update the store value.

* Params: `newValue: T`
* Returns: `void`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#update)

#### getValue()

Get the current store value.

* Params: `none`
* Returns: `T`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getvalue)

#### subscribe()

Subscribe to store updates.

* Params: `(newValue: T) => void`
* Returns: `() => void` (unsubscribe)
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#subscribe)

#### getDoc()

Get the underlying Yjs document.

* Params: `none`
* Returns: `Y.Doc`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getdoc)

#### getProvider()

Get the provider instance for the store.

* Params: `none`
* Returns: `Provider`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getprovider)

#### getText()

Get the Y.Text instance if store type is 'text'.

* Params: `none`
* Returns: `Y.Text | null`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#gettext)

#### getXml()

Get the Y.XmlFragment instance if store type is 'xml'.

* Params: `none`
* Returns: `Y.XmlFragment | null`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getxml)

#### getAwareness()

Get the Awareness instance for cursor/presence tracking.

* Params: `none`
* Returns: `Awareness`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getawareness)

#### destroy()

Destroy the store, cleaning up resources and listeners.

* Params: `none`
* Returns: `void`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#destroy)

#### Version Methods

#### saveVersion()

Save the current state as a named version.

* Params: `versionName: string`
* Returns: `Promise<string>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#saveversion)

#### getVersions()

Retrieve all saved versions.

* Params: `none`
* Returns: `Promise<Version[]>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getversions)

#### getVersionById()

Fetch a specific version by ID.

* Params: `versionId: string`
* Returns: `Promise<Version | null>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#getversionbyid)

#### restoreVersion()

Restore the store to a specific version by ID.

* Params: `versionId: string`
* Returns: `Promise<boolean>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#restoreversion)

#### setStateFromVersion()

Restore the state from a given version.

* Params: `version: Version`
* Returns: `Promise<void>`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#setstatefromversion)

#### v1 React API (deprecated)

<Warning>The v1 `useVeltCrdtStore` hook is deprecated. Use `useStore()` for all new React integrations.</Warning>

#### useVeltCrdtStore() (deprecated)

Legacy React Hook to create and sync a CRDT store. Internally delegates to `useStore` via a compatibility wrapper.

* Params: `VeltCrdtStoreConfig<T>`
* Returns: `Store<T>`
* React Hook: `useVeltCrdtStore()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#legacy-api-v1)

#### enableWebhook()

Enable webhook notifications for CRDT data changes.

* Params: `none`
* Returns: `void`
* React Hook: `crdtUtils.enableWebhook()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#configure-webhooks)

#### disableWebhook()

Disable webhook notifications for CRDT data changes.

* Params: `none`
* Returns: `void`
* React Hook: `crdtUtils.disableWebhook()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#configure-webhooks)

#### setWebhookDebounceTime()

Configure webhook debounce interval (minimum 5000ms).

* Params: `debounceTime: number`
* Returns: `void`
* React Hook: `crdtUtils.setWebhookDebounceTime()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#configure-webhooks)

#### setActivityDebounceTime()

Set how long CRDT editor keystrokes are batched before a single activity log record is flushed. Default: 10 minutes. Minimum: 10 seconds (10,000 ms).

* Params: `time: number` (milliseconds)
* Returns: `void`
* React Hook: `crdtUtils.setActivityDebounceTime()`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#activity-log-debounce)

#### getCrdtElement()

Get the CRDT element instance from the client.

* Params: `none`
* Returns: `CrdtElement`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

### Message Stream

#### pushMessage()

Push a raw Yjs message into the unified message stream for a document.

* Params: [`CrdtPushMessageQuery`](/api-reference/sdk/models/data-models#crdtpushmessagequery)
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### onMessage()

Subscribe to incoming messages on the unified message stream. Returns an unsubscribe function.

* Params: [`CrdtOnMessageQuery`](/api-reference/sdk/models/data-models#crdtonmessagequery)
* Returns: `() => void`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### getMessages()

Retrieve historical messages from the unified message stream.

* Params: [`CrdtGetMessagesQuery`](/api-reference/sdk/models/data-models#crdtgetmessagesquery)
* Returns: [`Promise<CrdtMessageData[]>`](/api-reference/sdk/models/data-models#crdtmessagedata)
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### getSnapshot()

Retrieve the latest CRDT state snapshot for a document.

* Params: [`CrdtGetSnapshotQuery`](/api-reference/sdk/models/data-models#crdtgetsnapshotquery)
* Returns: [`Promise<CrdtSnapshotData | null>`](/api-reference/sdk/models/data-models#crdtsnapshotdata)
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### saveSnapshot()

Persist a CRDT state snapshot for a document.

* Params: [`CrdtSaveSnapshotQuery`](/api-reference/sdk/models/data-models#crdtsavesnapshotquery)
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### pruneMessages()

Delete historical messages older than a given timestamp from the message stream.

* Params: [`CrdtPruneMessagesQuery`](/api-reference/sdk/models/data-models#crdtprunemessagesquery)
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#message-stream)

#### useCrdtUtils()

React Hook to access CRDT utility methods.

* Params: `none`
* Returns: `CrdtUtils`
* React Hook: `Yes`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#configure-webhooks)

#### useCrdtEventCallback()

React Hook to subscribe to CRDT events.

* Params: `eventName: 'updateData'`
* Returns: [`CrdtUpdateDataEvent`](/api-reference/sdk/models/data-models#crdtupdatedataevent) `| null`
* React Hook: `Yes`
* [Full Documentation →](/realtime-collaboration/crdt/setup/core#configure-webhooks)

### Debug Info

#### fetchDebugInfo()

Retrieve debug information about the current Velt SDK state as a one-time fetch. Returns a Promise that resolves with comprehensive debug data including SDK version, API key, and server/client state metadata.

* Params: `none`
* Returns: [`Promise<VeltDebugInfo>`](/api-reference/sdk/models/data-models#veltdebuginfo)
* React Hook: `n/a`
* [Full Documentation →](/get-started/advanced#debug-info)

#### getDebugInfo()

Subscribe to debug information updates about the current Velt SDK state. Returns an Observable that emits debug data whenever the SDK state changes.

* Params: `none`
* Returns: [`Observable<VeltDebugInfo>`](/api-reference/sdk/models/data-models#veltdebuginfo)
* React Hook: `n/a`
* [Full Documentation →](/get-started/advanced#debug-info)

### Folders

#### fetchFolders()

Fetch folder metadata and subfolders by organizationId, folderId with pagination.

* Params: `fetchFoldersRequest: FetchFoldersRequest`
* Returns: `Observable<FetchFoldersResponse>`
* React Hook: `n/a`
* [Full Documentation →](/api-reference/sdk/api/api-methods#client)

### Documents

#### setDocuments()

Initialize and subscribe to multiple Documents at once.

* Params:
  * `documents`: [Document\[\]](/api-reference/sdk/models/data-models#document)
  * `options?`: [SetDocumentsRequestOptions](/api-reference/sdk/models/data-models#setdocumentsrequestoptions)
* Returns: `Promise<void>`
* React Hook: `useSetDocuments()`
* [Full Documentation →](/key-concepts/overview#set-multiple-documents)

<Note>
  **Behavior Update:** This method now filters out documents the user doesn't have access to instead of failing the entire operation. When using the `allDocuments` flag with a folder, only the first 50 documents are retrieved, and any inaccessible documents are automatically filtered out.
</Note>

#### setDocument()

Initialize and subscribe to a single Document.

* Params:
  * `documentId`: string
  * `metadata?`: [DocumentMetadata](/api-reference/sdk/models/data-models#documentmetadata)
* Returns: `Promise<void>`
* React Hook: `useSetDocument()`
* [Full Documentation →](/key-concepts/overview#set-a-single-document)

#### setRootDocument()

Set a different document as the root document when multiple documents are active.

* Params: `document:` [Document](/api-reference/sdk/models/data-models#document)
* Returns: `Promise<void>`
* React Hook: `n/a`

#### unsetDocuments()

Use this to unsubscribe from all documents at once.

* Params: `void`
* Returns: `void`
* React Hook: `useUnsetDocuments()`
* [Full Documentation →](/key-concepts/overview#unset-multiple-documents)

#### fetchDocuments()

Fetch document metadata by `organizationId`, `folderId`, or specific `documentIds`. Supports pagination.

* Params: [FetchDocumentsRequest](/api-reference/sdk/models/data-models#fetchdocumentsrequest)
* Returns: [`Promise<FetchDocumentsResponse>`](/api-reference/sdk/models/data-models#fetchdocumentsresponse)
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#fetch-documents)

#### updateDocuments()

Update document metadata by organizationId, folderId or documentIds.

* Params: `UpdateDocumentsRequest<T = unknown>`
* Returns: `Promise<void>`
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#update-document-metadata)

### Location

#### setLocation()

Set the current location context. Used to define specific areas within a document.

* Params: `location: Location, isAdditional?: boolean`
  * `location`: Location object with:
    * `id`: Required unique identifier
    * `locationName?`: Optional display name for UI components
    * `version?`: Optional version object with:
      * `id`: Version identifier
      * `name`: Version display name
    * Additional custom key/value pairs
  * `isAdditional?`: Boolean to add additional locations
    * `false` (default): Set this as the root location
    * `true`: Add as additional location
* Returns: `Promise<void>`
* React Hook: `useSetLocation()`
* [Full Documentation →](/key-concepts/overview#set-location)

#### setLocations()

Initialize and/or append multiple locations at once.

* Params:
  * `locations`: [Location\[\]](/api-reference/sdk/models/data-models#location)
  * `options?`: [SetLocationsRequestOptions](/api-reference/sdk/models/data-models#setlocationsrequestoptions)
* Returns: `Promise<void>`
* React Hook: `n/a`

#### setRootLocation()

Set a different location as the root location when multiple locations are active.

* Params: `location:` [Location](/api-reference/sdk/models/data-models#location)
* Returns: `Promise<void>`
* React Hook: `n/a`

#### removeLocations()

Remove multiple locations.

* Params: `...locations:` [Location\[\]](/api-reference/sdk/models/data-models#location)
* Returns: `void`
* React Hook: `n/a`

#### unsetLocationsIds()

Unset locations by ids or all of them if you don't specify any parameters.

* Params: `ids?: string[]`
  * If no ids provided, removes all locations
  * If ids provided, removes that specific location
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/key-concepts/overview#unset-locations)

### Event Subscription

#### on()

Subscribe to Velt core events

* Params: `eventType: string`. [Here](/api-reference/sdk/models/data-models#client) is the list of events you can subscribe to.
* Returns: `Observable<VeltEventTypesMap[T]>`. It will return one of the objects from [here](/api-reference/sdk/models/data-models#client)
* React Hook: `useVeltEventCallback()`

### Self Hosting

#### setDataProviders()

Set the data providers for self hosting data.

* Params: [`VeltDataProvider`](/api-reference/sdk/models/data-models#veltdataprovider)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/self-host-data/overview)

#### setAnonymousUserDataProvider()

Register a provider to resolve email → userId mappings for anonymous users tagged by email in comments.

* Params: [`AnonymousUserDataProvider`](/api-reference/sdk/models/data-models#anonymoususerdataprovider)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/async-collaboration/comments/customize-behavior#setanonymoususerdataprovider)

### UI

#### setUiState()

Set custom state data that can be used in Velt wireframes, Velt if and Velt data components.

* Params: `Record<string, any>`
  * Object containing key-value pairs of custom state data
* Returns: `void`
* React Hook: `n/a`

#### getUiState()

Get the custom UI state data.

* Params: `void`
* Returns: `Observable<Record<string, any>>`
  * Observable that emits the current UI state object
* React Hook: `n/a`

#### injectCustomCss()

To inject custom CSS within Components with Shadow DOM enabled.

* Params: `customCss: CustomCss`
* Returns: `void`
* React Hook: `n/a`

#### removeVeltContent()

To remove Velt specific content from provided html content. This is useful when using Velt on a text editor or editable element.

* Params: `htmlContent: string`
* Returns: `string`
* React Hook: `n/a`

#### resetVeltButtonState()

Reset the state of Velt Button components.

* Params: (optional) [VeltResetButtonStateConfig](/api-reference/sdk/models/data-models#veltresetbuttonstateconfig)
* Returns: `void`
* React Hook: `n/a`
* [Full Documentation →](/ui-customization/custom-action-component#reset-velt-button-state)

### Feature Utilities

#### getPresenceElement()

Get the Presence Element Object to access the raw presence data.

* Params: `void`
* Returns: `PresenceElement`
* React Hook: `n/a`

#### getCursorElement()

Get the Cursor Element Object to access the raw cursor data.

* Params: `void`
* Returns: `CursorElement`
* React Hook: `n/a`

#### getCommentElement()

Get the Comment Element Object to access the raw comment data.

* Params: `void`
* Returns: `CommentElement`
* React Hook: `useCommentUtils()`

#### getSelectionElement()

Get the Selection Object to enable/disable the feature.

* Params: `void`
* Returns: `SelectionElement`
* React Hook: `n/a`

#### getRecorderElement()

Get the Recorder Object.

* Params: `void`
* Returns: [`RecorderElement`](/api-reference/sdk/models/data-models#recorderelement)
* React Hook: `n/a`

#### getContactElement()

Get the Contact Object.

* Params: `void`
* Returns: `ContactElement`
* React Hook: `n/a`

#### getRewriterElement()

Get the Rewriter Object.

* Params: `void`
* Returns: `RewriterElement`
* React Hook: `n/a`

#### getLiveStateSyncElement()

Get the LiveStateSync Object.

* Params: `void`
* Returns: `LiveStateSyncElement`
* React Hook: `n/a`

#### getArrowElement()

Get the Arrow Object.

* Params: `void`
* Returns: `ArrowElement`
* React Hook: `n/a`

### Feature Gating

#### isUserAllowed\$()

To check if user is allowed in provided document or not.

* Params: `void`
* Returns: `Observable<boolean>`
* React Hook: `n/a`

#### disableFeatures()

Provide a list of features to disable. Provide an empty array to enable all the features.

* Params: `features: Array<FeatureType>`
* Returns: `void`
* React Hook: `n/a`

#### isPlanExpired\$()

To check if plan is expired or not.

* Params: `void`
* Returns: `Observable<boolean>`
* React Hook: `n/a`

### Localization

#### setLanguage()

To set the language.

* Params: `language: string`
* Returns: `void`
* React Hook: `n/a`

#### setTranslations()

To set the translations for the language.

* Params: `language: string, translations: { [key: string]: string }`
* Returns: `void`
* React Hook: `n/a`

#### enableAutoTranslation()

To enable automatic translation of text in Velt Components based on User's language preference.

* Params: `void`
* Returns: `void`
* React Hook: `n/a`

### DOM Control

#### setScrollableElementsIds()

Tell us about the scrollable document ids to keep track on its scroll changes.

* Params: `ids: string[]`
* Returns: `void`
* React Hook: `n/a`

#### removeScrollableElementsIds()

To remove document params from a User.

* Params: `void`
* Returns: `void`
* React Hook: `n/a`
