Update CRDT Data
curl --request POST \
--url https://api.velt.dev/v2/crdt/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"organizationId": "<string>",
"documentId": "<string>",
"editorId": "<string>",
"data": {},
"type": "<string>",
"contentKey": "<string>"
}
}
'import requests
url = "https://api.velt.dev/v2/crdt/update"
payload = { "data": {
"organizationId": "<string>",
"documentId": "<string>",
"editorId": "<string>",
"data": {},
"type": "<string>",
"contentKey": "<string>"
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
organizationId: '<string>',
documentId: '<string>',
editorId: '<string>',
data: {},
type: '<string>',
contentKey: '<string>'
}
})
};
fetch('https://api.velt.dev/v2/crdt/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.velt.dev/v2/crdt/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'organizationId' => '<string>',
'documentId' => '<string>',
'editorId' => '<string>',
'data' => [
],
'type' => '<string>',
'contentKey' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.velt.dev/v2/crdt/update"
payload := strings.NewReader("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.velt.dev/v2/crdt/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/crdt/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "CRDT data updated successfully."
}
}
CRDT
Update CRDT Data
POST
/
v2
/
crdt
/
update
Update CRDT Data
curl --request POST \
--url https://api.velt.dev/v2/crdt/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"organizationId": "<string>",
"documentId": "<string>",
"editorId": "<string>",
"data": {},
"type": "<string>",
"contentKey": "<string>"
}
}
'import requests
url = "https://api.velt.dev/v2/crdt/update"
payload = { "data": {
"organizationId": "<string>",
"documentId": "<string>",
"editorId": "<string>",
"data": {},
"type": "<string>",
"contentKey": "<string>"
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
organizationId: '<string>',
documentId: '<string>',
editorId: '<string>',
data: {},
type: '<string>',
contentKey: '<string>'
}
})
};
fetch('https://api.velt.dev/v2/crdt/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.velt.dev/v2/crdt/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'organizationId' => '<string>',
'documentId' => '<string>',
'editorId' => '<string>',
'data' => [
],
'type' => '<string>',
'contentKey' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.velt.dev/v2/crdt/update"
payload := strings.NewReader("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.velt.dev/v2/crdt/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/crdt/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"organizationId\": \"<string>\",\n \"documentId\": \"<string>\",\n \"editorId\": \"<string>\",\n \"data\": {},\n \"type\": \"<string>\",\n \"contentKey\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "CRDT data updated successfully."
}
}
Use this API to replace existing CRDT editor data on the backend. The update creates proper CRDT operations on the existing document state so connected clients can pick up the change. Use it with the Multiplayer Editing (Yjs) feature.
Map (e.g., ReactFlow):
Array:
XML (e.g., TipTap):
Invalid arguments:
Endpoint
POST https://api.velt.dev/v2/crdt/update
Headers
Your API key.
Your Auth Token.
Body Parameters
Show properties
Show properties
Organization ID where the document belongs
Document ID containing the CRDT editor data
Unique identifier for the specific CRDT editor instance
The new CRDT content to replace existing data with. Must match the specified
type: string for text/xml, object for map, array for array.The CRDT data type. One of:
text, map, array, xml.Yjs content key name. Defaults to
content. Use default for TipTap.Example Requests
Text (e.g., CodeMirror):{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-collab-note",
"data": "Updated collaborative content!",
"type": "text"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-flow-editor",
"data": { "nodes": { "node-1": { "label": "Updated" } }, "edges": {} },
"type": "map"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-list-editor",
"data": [{ "id": "1", "text": "Updated Item 1" }, { "id": "3", "text": "New Item 3" }],
"type": "array"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-rich-text-editor",
"data": "<paragraph>Updated content</paragraph><heading level=\"2\">New heading</heading>",
"type": "xml",
"contentKey": "default"
}
}
Response
Success Response
{
"result": {
"status": "success",
"message": "CRDT data updated successfully."
}
}
Error Responses
No CRDT data found for the given editor ID:{
"error": {
"message": "No CRDT data found for this editor ID.",
"status": "NOT_FOUND"
}
}
{
"error": {
"message": "Data must be a string for type text.",
"status": "INVALID_ARGUMENT"
}
}
{
"result": {
"status": "success",
"message": "CRDT data updated successfully."
}
}
Was this page helpful?
⌘I

