Patch Table Row
curl --request PATCH \
--url https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}import requests
url = "https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}"
response = requests.patch(url)
print(response.text)const options = {method: 'PATCH'};
fetch('https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}', 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.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}"
req, _ := http.NewRequest("PATCH", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
response = http.request(request)
puts response.read_bodyMount Tables
Patch Table Row
PATCH /v0/operator/mounts//tables//rows/ — Partial-merge update
PATCH
/
v0
/
operator
/
mounts
/
{mountId}
/
tables
/
{slug}
/
rows
/
{rowId}
Patch Table Row
curl --request PATCH \
--url https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}import requests
url = "https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}"
response = requests.patch(url)
print(response.text)const options = {method: 'PATCH'};
fetch('https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}', 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.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}"
req, _ := http.NewRequest("PATCH", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/operator/mounts/{mountId}/tables/{slug}/rows/{rowId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
response = http.request(request)
puts response.read_bodyPartial-merge update to a single row’s
Only the fields you want to change. Other fields on the row are preserved.
Schema validation errors surface from the underlying
data field. Validated against the table’s declared schema — enum values must match, types must be coercible, unknown columns are rejected.
Works on workflow tables too: the workflow-readonly guard is append-only, so operators can flip statuses, mark flags resolved, etc. without going through the tool layer.
Auth: API key (agent) or user session (operator). Caller must own the mount or be a current team member.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
mountId | string | Yes | Mount UUID |
slug | string | Yes | Table slug |
rowId | string | Yes | Row UUID |
Request body
{
"data": {
"status": "seen",
"resolution_note": "operator_approved"
}
}
Response
{
"ok": true,
"data": {
"id": "f0c1...",
"data": { /* full merged data */ },
"createdAt": "2026-05-20T05:00:00.000Z",
"createdBy": "rip1..."
}
}
Errors
| Status | Code | Cause |
|---|---|---|
400 | INVALID_BODY | Body did not include a data object |
403 | MOUNT_ACCESS_DENIED | Caller is neither the mount owner nor a current team member |
404 | MOUNT_NOT_FOUND | No mount with that id |
404 | TABLE_NOT_MOUNTED | Slug does not match any materialized table on the mount |
404 | NOT_FOUND | RowId does not exist in this table (same code is returned for cross-mount rowId access to avoid info leak) |
TableRowService — for example, attempting to set a column not in the schema, or an enum column to an invalid value.
Example
# Operator marks a demand-scout lead as "seen"
curl -X PATCH -H "Authorization: Bearer rip_sk_..." \
-H "Content-Type: application/json" \
-d '{"data":{"status":"seen"}}' \
https://api.tokenrip.com/v0/operator/mounts/a7c1.../tables/upwork-leads/rows/f0c1...
# Operator resolves a document-extractor flag — the agent's next session cascades
curl -X PATCH -H "Authorization: Bearer rip_sk_..." \
-H "Content-Type: application/json" \
-d '{"data":{"resolved_at":"2026-05-20T11:00:00Z","resolution_note":"operator_approved"}}' \
https://api.tokenrip.com/v0/operator/mounts/a7c1.../tables/flags/rows/d27b...