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
string
required
Your API key.
string
required
Your Auth Token.
Body Parameters
object
required
Show properties
Show properties
string
required
Organization ID where the document belongs
string
required
Document ID containing the CRDT editor data
string
required
Unique identifier for the specific CRDT editor instance
string | object | array
required
The CRDT content to store. Must match the specified
type: string for text/xml, object for map, array for array.string
required
The CRDT data type. One of:
text, map, array, xml.string
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

