Create and manage custom data tables. Store, query, and manipulate structured data within workflows. Query Rows accepts a plain predicate — {"field":"wins","op":"gte","value":10} — for one condition. Use all (AND) or any (OR) groups for multiple or nested conditions. Operators: eq, ne, gt, gte, lt, lte, in, nin, like, ilike, nlike, nilike, contains, ncontains, startsWith, endsWith, isNull, isNotNull, isEmpty, isNotEmpty. Order is a sort spec [{"field":"wins","direction":"desc"}]. Query Rows returns every matching row when Limit is omitted (fails if the result exceeds 5MB — add a filter or a Limit). With a Limit, responses page: a non-null nextCursor means more rows exist — pass it back as the cursor. Columns to Return narrows each row to the selected columns (by stable id or name; one that no longer exists is skipped); leave it empty for every column.
Insert a new row into a table. IMPORTANT: You must use the "data" parameter (not "values", "row", "fields", or other variations) to specify the row contents.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
data | object | Yes | Row data as JSON object |
| Parameter | Type | Description |
|---|
success | boolean | Whether row was inserted |
row | json | Inserted row data |
message | string | Status message |
Insert multiple rows into a table at once (up to 1000 rows)
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
rows | array | Yes | Array of row data objects (max 1000 rows) |
| Parameter | Type | Description |
|---|
success | boolean | Whether rows were inserted |
rows | array | Inserted rows data |
insertedCount | number | Number of rows inserted |
message | string | Status message |
Insert or update a row based on unique column constraints. If a row with matching unique field exists, update it; otherwise insert a new row. IMPORTANT: You must use the "data" parameter (not "values", "row", "fields", or other variations) to specify the row contents.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
data | object | Yes | Row data to insert or update |
conflictTarget | string | No | Unique column to match on. Required only when the table has more than one unique column. |
| Parameter | Type | Description |
|---|
success | boolean | Whether row was upserted |
row | json | Upserted row data |
operation | string | Operation performed: insert or update |
message | string | Status message |
Update an existing row in a table. Supports partial updates - only include the fields you want to change. IMPORTANT: You must use the "data" parameter (not "values", "row", "fields", or other variations) to specify the fields to update.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
rowId | string | Yes | Row ID to update |
data | object | Yes | Updated row data |
| Parameter | Type | Description |
|---|
success | boolean | Whether row was updated |
row | json | Updated row data |
message | string | Status message |
Update multiple rows that match filter criteria. Data is merged with existing row data.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
filter | object | Yes | Filter criteria using operators like $eq, $ne, $gt, $lt, $contains, $ncontains, $startsWith, $endsWith, $in, $nin, $empty, etc. |
data | object | Yes | Fields to update (merged with existing data) |
limit | number | No | Maximum number of rows to update (default: no limit, max: 1000) |
| Parameter | Type | Description |
|---|
success | boolean | Whether rows were updated |
updatedCount | number | Number of rows updated |
updatedRowIds | array | IDs of updated rows |
message | string | Status message |
Delete a row from a table
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
rowId | string | Yes | Row ID to delete |
| Parameter | Type | Description |
|---|
success | boolean | Whether row was deleted |
deletedCount | number | Number of rows deleted |
message | string | Status message |
Delete multiple rows that match filter criteria. Use with caution - supports optional limit for safety.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
filter | object | Yes | Filter criteria using operators like $eq, $ne, $gt, $lt, $contains, $ncontains, $startsWith, $endsWith, $in, $nin, $empty, etc. |
limit | number | No | Maximum number of rows to delete (default: no limit, max: 1000) |
| Parameter | Type | Description |
|---|
success | boolean | Whether rows were deleted |
deletedCount | number | Number of rows deleted |
deletedRowIds | array | IDs of deleted rows |
message | string | Status message |
Query rows with a typed predicate filter and cursor pagination. A single filter can be a plain condition: \{"field":"wins","op":"gte","value":10\}. Use all (AND) or any (OR) groups for multiple or nested conditions. Operators: eq, ne, gt, gte, lt, lte, in, nin, like, ilike, nlike, nilike, contains, ncontains, startsWith, endsWith, isNull, isNotNull, isEmpty, isNotEmpty. Order is a sort spec, e.g. [\{"field":"wins","direction":"desc"\}]. Omit limit to return the entire result — the query fails if it exceeds the 5MB budget (narrow with a filter or set a limit). With a limit, a page can end early at the byte budget: a non-null nextCursor means more rows exist — pass it back as cursor to continue; never infer completion from page size.
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
filter | json | No | Predicate condition, e.g. \{"field":"wins","op":"gte","value":10\}. Use all or any for multiple conditions; omit to match all rows. |
columns | array | No | Stable column IDs or table column names to include in each row data object. Omit or pass an empty array to return all columns. A reference that matches no column is ignored. |
order | json | No | Sort spec, e.g. \[\{"field":"wins","direction":"desc"\}\]. |
limit | number | No | Maximum rows per page. Omit to return the entire matching result — fails if it exceeds the 5MB budget. With a limit, pages may byte-cut early and set nextCursor when more remain. |
cursor | string | No | Opaque pagination cursor returned by a prior query. Omit for the first page. |
| Parameter | Type | Description |
|---|
success | boolean | Whether the query succeeded |
rows | array | Query result rows |
rowCount | number | Number of rows returned |
totalCount | number | Total rows matching the predicate (computed on the first page only) |
limit | number | Limit used in the query |
nextCursor | string | Cursor to fetch the next page, or null on the last page |
Get a single row by ID
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
rowId | string | Yes | Row ID to retrieve |
| Parameter | Type | Description |
|---|
success | boolean | Whether row was retrieved |
row | json | Row data |
message | string | Status message |
Get the schema configuration of a table
| Parameter | Type | Required | Description |
|---|
tableId | string | Yes | Table ID |
| Parameter | Type | Description |
|---|
success | boolean | Whether schema was retrieved |
name | string | Table name |
columns | array | Column definitions (each includes its stable id) |
columnCount | number | Number of columns |
rowCount | number | Number of rows in the table |
maxRows | number | Max rows per table for the workspace's plan |
message | string | Status message |