---
title: "Updates a row (partial update)."
method: PUT
path: "/datatables/{tableId}/rows/{rowId}"
tags: ["DataTables"]
---

# Updates a row (partial update).

`PUT /datatables/{tableId}/rows/{rowId}`

## Path parameters

- `tableId` string, required
- `rowId` string, required

## Headers

- `If-Match` string

## Request body

- UpdateRowRequest
  - `data` object, required — Free-form JSON object keyed by column `key`; each value is a raw JSON scalar, object, or `media` object.

## Response `200`

OK

- DataTableRowModel
  - `id` string, nullable
  - `sortOrder` integer
  - `data` object, nullable — Stored row data as a JSON object keyed by column `key`. Values follow each column's `ColumnType` rules: STRING/RICHTEXT/HIDDEN/SELECT/URL/DATE/TIME are JSON strings, NUMBER is a JSON number, BOOLEAN is JSON true/false, and MEDIA is always a normalized object `{ url, thumbnailUrl, name, mimeType, mediaId? }` (id and id-object input forms are expanded server-side at write time).
  - `updatedAt` string, date-time
  - `eTag` string, nullable — Optimistic concurrency token. To ensure the row hasn't changed since you read it, send this value back as the `If-Match` request header on the REST `updateDataTableRow` (HTTP `PUT`) call, or as the `eTag` input field on the GraphQL `updateDataTableRow` mutation. A stale token results in `409 Conflict` (REST) or a mutation error (GraphQL). Note: the REST endpoint does not read an `eTag` body property — it uses the `If-Match` header.

## Other responses

- `404` — Not Found
- `409` — Conflict

---

[API](https://skmtc.net/reveldigital/apis/revel-digital-rest-api.md) · [All operations](https://skmtc.net/reveldigital/apis/revel-digital-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reveldigital/revel-digital-rest-api/versions/f23a94aea621/schema)
