Add CRDT Data
curl --request POST \
--url https://api.velt.dev/v2/crdt/add \
--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/add"
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/add', 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/add",
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/add"
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/add")
.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/add")
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 added successfully."
}
}
CRDT
Add CRDT Data
POST
/
v2
/
crdt
/
add
Add CRDT Data
curl --request POST \
--url https://api.velt.dev/v2/crdt/add \
--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/add"
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/add', 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/add",
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/add"
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/add")
.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/add")
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 added successfully."
}
}
Use this API to create new CRDT editor data on the backend. 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/add
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 CRDT content to store. 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": "Hello, collaborative world!",
"type": "text"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-flow-editor",
"data": { "nodes": {}, "edges": {} },
"type": "map"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-list-editor",
"data": [{ "id": "1", "text": "Item 1" }, { "id": "2", "text": "Item 2" }],
"type": "array"
}
}
{
"data": {
"organizationId": "YOUR_ORGANIZATION_ID",
"documentId": "YOUR_DOCUMENT_ID",
"editorId": "my-rich-text-editor",
"data": "<paragraph>Hello World</paragraph>",
"type": "xml",
"contentKey": "default"
}
}
Response
Success Response
{
"result": {
"status": "success",
"message": "CRDT data added successfully."
}
}
Error Responses
CRDT data already exists for the given editor ID:{
"error": {
"message": "CRDT data already exists for this editor ID.",
"status": "ALREADY_EXISTS"
}
}
{
"error": {
"message": "Editor ID is required.",
"status": "INVALID_ARGUMENT"
}
}
{
"result": {
"status": "success",
"message": "CRDT data added successfully."
}
}
Was this page helpful?
⌘I

