Apply a field patch, duplicate records with regenerated automatic IDs, or delete 1–200 selected records atomically. Recheck source revisions and schema, enforce native constraints, and replay an unchanged idempotent request without duplicating records.
curl --request POST \
--url http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"expectedSchemaVersion": 1,
"rows": [
{
"rowId": "01J00000000000000000000003",
"expectedVersion": "1"
}
],
"action": {
"type": "set",
"values": {
"NAME": "Updated name"
}
}
}
'import requests
url = "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk"
payload = {
"expectedSchemaVersion": 1,
"rows": [
{
"rowId": "01J00000000000000000000003",
"expectedVersion": "1"
}
],
"action": {
"type": "set",
"values": { "NAME": "Updated name" }
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
expectedSchemaVersion: 1,
rows: [{rowId: '01J00000000000000000000003', expectedVersion: '1'}],
action: {type: 'set', values: {NAME: 'Updated name'}}
})
};
fetch('http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4310",
CURLOPT_URL => "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk",
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([
'expectedSchemaVersion' => 1,
'rows' => [
[
'rowId' => '01J00000000000000000000003',
'expectedVersion' => '1'
]
],
'action' => [
'type' => 'set',
'values' => [
'NAME' => 'Updated name'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$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 := "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk"
payload := strings.NewReader("{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <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("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"mutationId": "<string>",
"action": "set",
"affected": 123,
"createdIds": [
"<string>"
],
"deletedIds": [
"<string>"
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}Bulk rows
Apply a field patch, duplicate records with regenerated automatic IDs, or delete 1–200 selected records atomically. Recheck source revisions and schema, enforce native constraints, and replay an unchanged idempotent request without duplicating records.
POST
/
v1
/
orgs
/
{orgId}
/
databases
/
{databaseId}
/
tables
/
{tableId}
/
rows
/
bulk
Apply a field patch, duplicate records with regenerated automatic IDs, or delete 1–200 selected records atomically. Recheck source revisions and schema, enforce native constraints, and replay an unchanged idempotent request without duplicating records.
curl --request POST \
--url http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"expectedSchemaVersion": 1,
"rows": [
{
"rowId": "01J00000000000000000000003",
"expectedVersion": "1"
}
],
"action": {
"type": "set",
"values": {
"NAME": "Updated name"
}
}
}
'import requests
url = "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk"
payload = {
"expectedSchemaVersion": 1,
"rows": [
{
"rowId": "01J00000000000000000000003",
"expectedVersion": "1"
}
],
"action": {
"type": "set",
"values": { "NAME": "Updated name" }
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
expectedSchemaVersion: 1,
rows: [{rowId: '01J00000000000000000000003', expectedVersion: '1'}],
action: {type: 'set', values: {NAME: 'Updated name'}}
})
};
fetch('http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "4310",
CURLOPT_URL => "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk",
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([
'expectedSchemaVersion' => 1,
'rows' => [
[
'rowId' => '01J00000000000000000000003',
'expectedVersion' => '1'
]
],
'action' => [
'type' => 'set',
'values' => [
'NAME' => 'Updated name'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$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 := "http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk"
payload := strings.NewReader("{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <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("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:4310/v1/orgs/{orgId}/databases/{databaseId}/tables/{tableId}/rows/bulk")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"expectedSchemaVersion\": 1,\n \"rows\": [\n {\n \"rowId\": \"01J00000000000000000000003\",\n \"expectedVersion\": \"1\"\n }\n ],\n \"action\": {\n \"type\": \"set\",\n \"values\": {\n \"NAME\": \"Updated name\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"mutationId": "<string>",
"action": "set",
"affected": 123,
"createdIds": [
"<string>"
],
"deletedIds": [
"<string>"
]
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": "<unknown>"
}
}Authorizations
apiKeyoauth
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Bound to actor, operation, target, schema version and canonical payload; changed input returns 409.
Required string length:
8 - 255Path Parameters
Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Body
application/json
Response
Authorised operation result.
Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Available options:
set, duplicate, delete Required range:
x <= 200Maximum array length:
200Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Maximum array length:
200Pattern:
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Was this page helpful?
