{ "openapi": "3.1.0", "info": { "title": "Sim Tables API v2", "description": "Manage tables, typed columns, rows, saved views, workflow groups, folders, imports, and exports through the public v2 API. Row data is keyed by column name.", "version": "2.0.0", "contact": { "name": "Sim Support", "email": "help@sim.ai", "url": "https://www.sim.ai" }, "license": { "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0.html" } }, "servers": [ { "url": "https://www.sim.ai", "description": "Production" } ], "tags": [ { "name": "Tables", "description": "Manage tables, columns, rows, views, runs, folders, imports, and exports." } ], "security": [ { "apiKey": [] } ], "paths": { "/api/v2/tables": { "get": { "operationId": "listTables", "summary": "List Tables", "description": "List all tables in a workspace with optional folder filtering, search, sorting, and an opaque cursor envelope.", "tags": ["Tables"], "parameters": [ { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace whose tables should be listed.", "schema": { "type": "string", "minLength": 1, "description": "Workspace whose tables should be listed." } }, { "name": "folderPath", "in": "query", "required": false, "description": "Restrict results to tables in this folder.", "schema": { "description": "Restrict results to tables in this folder.", "type": "string" } }, { "name": "search", "in": "query", "required": false, "description": "Case-insensitive substring search on the resource name.", "schema": { "description": "Case-insensitive substring search on the resource name.", "type": "string", "minLength": 1, "maxLength": 200 } }, { "name": "sortBy", "in": "query", "required": false, "description": "Field used to sort the result.", "schema": { "default": "createdAt", "description": "Field used to sort the result.", "type": "string", "enum": ["name", "createdAt", "updatedAt"] } }, { "name": "sortOrder", "in": "query", "required": false, "description": "Sort direction.", "schema": { "default": "asc", "description": "Sort direction.", "type": "string", "enum": ["asc", "desc"] } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum tables to return, clamped between 1 and 1000.", "schema": { "description": "Maximum tables to return, clamped between 1 and 1000.", "default": 100, "type": "number" } }, { "name": "cursor", "in": "query", "required": false, "description": "Opaque cursor from the previous page.", "schema": { "description": "Opaque cursor from the previous page.", "type": "string", "minLength": 1 } } ], "responses": { "200": { "description": "The tables in the workspace.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableListResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "createTable", "summary": "Create Table", "description": "Create a table with a typed column schema and optional folder placement.", "tags": ["Tables"], "requestBody": { "required": true, "description": "Workspace, table metadata, folder placement, and typed columns.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableRequest" } } } }, "responses": { "201": { "description": "The created table.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "409": { "$ref": "#/components/responses/Conflict" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}": { "get": { "operationId": "getTable", "summary": "Get Table", "description": "Retrieve a table with its metadata, column schema, locks, and current job.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The requested table.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTable", "summary": "Delete Table", "description": "Delete a table and return an explicit deletion acknowledgement.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "Table deletion acknowledgement.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTable", "summary": "Update Table", "description": "Rename a table, edit its description, or move it to a canonical folder. At least one mutable field is required; lock flags remain read-only.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and one or more table metadata or placement changes.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableRequest" } } } }, "responses": { "200": { "description": "The updated table.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2UpdateTableResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/columns": { "post": { "operationId": "addTableColumn", "summary": "Add Column", "description": "Add a typed column and return the complete resulting table schema.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and the typed column to add.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddTableColumnRequest" } } } }, "responses": { "200": { "description": "The updated table columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableColumnsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTableColumn", "summary": "Update Column", "description": "Update a column by name and return the complete resulting table schema.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, current column name, and fields to update.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableColumnRequest" } } } }, "responses": { "200": { "description": "The updated table columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableColumnsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTableColumn", "summary": "Delete Column", "description": "Delete a column by name while preserving at least one table column.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and column name to delete.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTableColumnRequest" } } } }, "responses": { "200": { "description": "The surviving table columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableColumnsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/rows": { "get": { "operationId": "listTableRows", "summary": "List Rows", "description": "List a plain cursor page in default row order. Use the query endpoint for predicate filtering and sorting.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum rows to return in the current page.", "schema": { "description": "Maximum rows to return in the current page.", "type": "integer", "minimum": 1, "maximum": 1000 } }, { "name": "cursor", "in": "query", "required": false, "description": "Opaque cursor returned by the previous page.", "schema": { "description": "Opaque cursor returned by the previous page.", "type": "string", "minLength": 1 } } ], "responses": { "200": { "description": "A page of table rows.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableRowListResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "createTableRows", "summary": "Create Rows", "description": "Insert one row with a data object or insert a bounded batch with a rows array. Cell keys are column names.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "A single row or bounded row batch keyed by column name.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableRowsRequest" } } } }, "responses": { "200": { "description": "The inserted row or rows.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableRowsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTableRows", "summary": "Update Rows by Filter", "description": "Apply the same partial data patch to every row matching a non-empty predicate.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, typed predicate, and row-data patch.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableRowsRequest" } } } }, "responses": { "200": { "description": "The bulk update result.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2UpdateTableRowsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTableRows", "summary": "Delete Rows", "description": "Delete rows by a non-empty predicate or an explicit bounded list of row identifiers.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and exactly one of a predicate or row identifier list.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTableRowsRequest" } } } }, "responses": { "200": { "description": "The bulk deletion result.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableRowsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/rows/{rowId}": { "get": { "operationId": "getTableRow", "summary": "Get Row", "description": "Retrieve one row by identifier.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "rowId", "in": "path", "required": true, "description": "Unique table row identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table row identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The requested table row.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableRowResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTableRow", "summary": "Update Row", "description": "Merge a partial data patch into one row by identifier.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "rowId", "in": "path", "required": true, "description": "Unique table row identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table row identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and row-data patch keyed by column name.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableRowRequest" } } } }, "responses": { "200": { "description": "The updated table row.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableRowResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTableRow", "summary": "Delete Row", "description": "Delete one row by identifier.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "rowId", "in": "path", "required": true, "description": "Unique table row identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table row identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The row deletion result.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableRowResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/rows/upsert": { "post": { "operationId": "upsertTableRow", "summary": "Upsert Row", "description": "Insert a row or update the existing row that conflicts on a selected unique column.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, row data, and optional unique-column conflict target.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertTableRowRequest" } } } }, "responses": { "200": { "description": "The upserted row and operation performed.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2UpsertTableRowResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/query": { "post": { "operationId": "queryTableRows", "summary": "Query Rows", "description": "Query rows with a typed predicate, ordered sort specification, and opaque cursor pagination.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, optional predicate and sort, and cursor pagination controls.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QueryTableRowsRequest" } } } }, "responses": { "200": { "description": "A page of matching table rows.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2QueryTableRowsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "413": { "$ref": "#/components/responses/PayloadTooLarge" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/views": { "get": { "operationId": "listTableViews", "summary": "List Views", "description": "List the bounded set of saved table views, with references to removed columns pruned on read.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The saved table views.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableViewListResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "createTableView", "summary": "Create View", "description": "Save a filter, sort, and column layout as a named presentation of a table.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, name, and saved filter, sort, and layout configuration.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableViewRequest" } } } }, "responses": { "201": { "description": "The created table view.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableViewResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/views/{viewId}": { "get": { "operationId": "getTableView", "summary": "Get View", "description": "Retrieve one saved table view by identifier.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "viewId", "in": "path", "required": true, "description": "Unique saved-view identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique saved-view identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The requested table view.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableViewResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTableView", "summary": "Update View", "description": "Rename a view, replace or shallow-merge its configuration, or promote it to the table default.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "viewId", "in": "path", "required": true, "description": "Unique saved-view identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique saved-view identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and one or more saved-view changes.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableViewRequest" } } } }, "responses": { "200": { "description": "The updated table view.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableViewResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTableView", "summary": "Delete View", "description": "Delete a saved presentation without changing any table rows.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "viewId", "in": "path", "required": true, "description": "Unique saved-view identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique saved-view identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "Table view deletion acknowledgement.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableViewResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/groups": { "get": { "operationId": "listTableWorkflowGroups", "summary": "List Workflow Groups", "description": "List the workflow and enrichment groups that can be dispatched for a table.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the table.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." } } ], "responses": { "200": { "description": "The table workflow groups.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableWorkflowGroupListResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "addTableWorkflowGroup", "summary": "Add Workflow Group", "description": "Bind a workflow or enrichment to the table and create the columns populated by its outputs.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, producer definition, and output columns.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddTableWorkflowGroupRequest" } } } }, "responses": { "201": { "description": "The created workflow group and resulting columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2AddTableWorkflowGroupResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "updateTableWorkflowGroup", "summary": "Update Workflow Group", "description": "Restructure a workflow group, its producer, outputs, or execution behavior.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, workflow group identifier, and producer changes.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTableWorkflowGroupRequest" } } } }, "responses": { "200": { "description": "The updated workflow group and resulting columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2UpdateTableWorkflowGroupResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTableWorkflowGroup", "summary": "Delete Workflow Group", "description": "Delete a workflow group and every table column populated by that group.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and workflow group identifier.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTableWorkflowGroupRequest" } } } }, "responses": { "200": { "description": "Workflow-group deletion acknowledgement and surviving columns.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableWorkflowGroupResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/columns/run": { "post": { "operationId": "runTableColumns", "summary": "Run Column Groups", "description": "Asynchronously run workflow or enrichment groups across all rows or a selected row subset.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, producer groups, execution mode, and optional row scope.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunTableColumnsRequest" } } } }, "responses": { "200": { "description": "The accepted table-column dispatch.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2RunTableColumnsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/rows/{rowId}/enrichment/{groupId}": { "post": { "operationId": "runRowEnrichment", "summary": "Run Enrichment For One Row", "description": "Asynchronously run one workflow or enrichment group for one table row.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } }, { "name": "rowId", "in": "path", "required": true, "description": "Unique table row identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table row identifier." } }, { "name": "groupId", "in": "path", "required": true, "description": "Workflow or enrichment group to run.", "schema": { "type": "string", "minLength": 1, "description": "Workflow or enrichment group to run." } } ], "requestBody": { "required": true, "description": "Workspace scope for the row enrichment.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunRowEnrichmentRequest" } } } }, "responses": { "200": { "description": "The accepted row enrichment dispatch.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2RunRowEnrichmentResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/rows/find": { "post": { "operationId": "findTableRows", "summary": "Find Rows", "description": "Search every cell case-insensitively, optionally within a predicate-filtered and sorted view.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, substring query, and optional predicate and sort.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FindTableRowsRequest" } } } }, "responses": { "200": { "description": "The matching table cells.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2FindTableRowsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/imports": { "post": { "operationId": "createTableImport", "summary": "Create Table Import", "description": "Create a durable CSV import. Upload sources receive signed transfer instructions; workspace-file sources begin processing directly.", "tags": ["Tables"], "requestBody": { "required": true, "description": "Workspace, CSV source, target table, optional mapping, and timezone.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableImportRequest" } } } }, "responses": { "201": { "description": "The created table import and optional transfer instructions.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableImportResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "409": { "$ref": "#/components/responses/Conflict" }, "413": { "$ref": "#/components/responses/PayloadTooLarge" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/imports/{importId}": { "get": { "operationId": "getTableImport", "summary": "Get Table Import", "description": "Read progress and terminal state for a durable table import.", "tags": ["Tables"], "parameters": [ { "name": "importId", "in": "path", "required": true, "description": "Unique table-import identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-import identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } } ], "responses": { "200": { "description": "The requested table import.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableImportResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "cancelTableImport", "summary": "Cancel Table Import", "description": "Cancel an upload or processing import without rolling back committed row batches.", "tags": ["Tables"], "parameters": [ { "name": "importId", "in": "path", "required": true, "description": "Unique table-import identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-import identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } }, { "name": "upload-token", "in": "header", "required": false, "description": "Signed upload control token returned when an upload-backed import was created.", "schema": { "description": "Signed upload control token returned when an upload-backed import was created.", "type": "string", "minLength": 1 } } ], "responses": { "200": { "description": "The canceled table import.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CancelTableImportResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "410": { "$ref": "#/components/responses/Gone" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/imports/{importId}/parts": { "post": { "operationId": "createTableImportPartUrls", "summary": "Create Table Import Part URLs", "description": "Issue short-lived signed PUT URLs for a bounded set of multipart part numbers.", "tags": ["Tables"], "parameters": [ { "name": "importId", "in": "path", "required": true, "description": "Unique table-import identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-import identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } }, { "name": "upload-token", "in": "header", "required": true, "description": "Signed upload control token returned when the upload session was created.", "schema": { "type": "string", "minLength": 1, "description": "Signed upload control token returned when the upload session was created." } } ], "requestBody": { "required": true, "description": "Multipart part numbers for which signed URLs should be created.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableImportPartUrlsRequest" } } } }, "responses": { "200": { "description": "The signed multipart upload URLs.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableImportPartUrlsResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "410": { "$ref": "#/components/responses/Gone" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/imports/{importId}/complete": { "post": { "operationId": "completeTableImportUpload", "summary": "Complete Table Import Upload", "description": "Verify or assemble the uploaded CSV and begin processing with the same import id.", "tags": ["Tables"], "parameters": [ { "name": "importId", "in": "path", "required": true, "description": "Unique table-import identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-import identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } }, { "name": "upload-token", "in": "header", "required": true, "description": "Signed upload control token returned when the upload session was created.", "schema": { "type": "string", "minLength": 1, "description": "Signed upload control token returned when the upload session was created." } } ], "responses": { "200": { "description": "The table import after upload completion.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CompleteTableImportUploadResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "410": { "$ref": "#/components/responses/Gone" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/exports": { "post": { "operationId": "createTableExport", "summary": "Create Table Export", "description": "Create a durable CSV or JSON export that completes inline for small tables and queues larger work.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope and export format.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableExportRequest" } } } }, "responses": { "201": { "description": "The created table export.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableExportResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/exports/{exportId}": { "get": { "operationId": "getTableExport", "summary": "Get Table Export", "description": "Read progress and terminal state for a durable table export.", "tags": ["Tables"], "parameters": [ { "name": "exportId", "in": "path", "required": true, "description": "Unique table-export identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-export identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } } ], "responses": { "200": { "description": "The requested table export.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableExportResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "cancelTableExport", "summary": "Cancel Table Export", "description": "Cancel an export that has not reached a terminal state.", "tags": ["Tables"], "parameters": [ { "name": "exportId", "in": "path", "required": true, "description": "Unique table-export identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-export identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } } ], "responses": { "200": { "description": "The canceled table export.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CancelTableExportResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/exports/{exportId}/download": { "get": { "operationId": "downloadTableExport", "summary": "Download Table Export", "description": "Return a short-lived signed download URL for a completed table export.", "tags": ["Tables"], "parameters": [ { "name": "exportId", "in": "path", "required": true, "description": "Unique table-export identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table-export identifier." } }, { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace that owns the transfer resource.", "schema": { "type": "string", "minLength": 1, "description": "Workspace that owns the transfer resource." } } ], "responses": { "200": { "description": "Signed table-export download information.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DownloadTableExportResponse" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "410": { "$ref": "#/components/responses/Gone" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/{tableId}/cancel-runs": { "post": { "operationId": "cancelTableRuns", "summary": "Cancel Column Runs", "description": "Stop in-flight and pending workflow or enrichment cell runs across the table or one selected row.", "tags": ["Tables"], "parameters": [ { "name": "tableId", "in": "path", "required": true, "description": "Unique table identifier.", "schema": { "type": "string", "minLength": 1, "description": "Unique table identifier." } } ], "requestBody": { "required": true, "description": "Workspace scope, cancellation scope, and optional predicate or producer groups.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CancelTableRunsRequest" } } } }, "responses": { "200": { "description": "The number of canceled cell runs.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CancelTableRunsResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } }, "/api/v2/tables/folders": { "get": { "operationId": "listTablesFolders", "summary": "List Folders", "description": "List table folders, optionally restricting the result to direct children of a canonical parent path.", "tags": ["Tables"], "parameters": [ { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace whose folders should be listed.", "schema": { "type": "string", "minLength": 1, "description": "Workspace whose folders should be listed." } }, { "name": "parentPath", "in": "query", "required": false, "description": "Restrict results to direct children of this parent path.", "schema": { "description": "Restrict results to direct children of this parent path.", "type": "string" } }, { "name": "search", "in": "query", "required": false, "description": "Case-insensitive substring match against the folder name.", "schema": { "description": "Case-insensitive substring match against the folder name.", "type": "string", "minLength": 1, "maxLength": 200 } }, { "name": "sortBy", "in": "query", "required": false, "description": "Field used to sort the result.", "schema": { "default": "name", "description": "Field used to sort the result.", "type": "string", "enum": ["name", "createdAt", "updatedAt"] } }, { "name": "sortOrder", "in": "query", "required": false, "description": "Sort direction.", "schema": { "default": "asc", "description": "Sort direction.", "type": "string", "enum": ["asc", "desc"] } } ], "responses": { "200": { "description": "The table folders.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2TableFolderListResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "post": { "operationId": "createTablesFolder", "summary": "Create Folder", "description": "Create one table-folder leaf whose parent path already exists.", "tags": ["Tables"], "requestBody": { "required": true, "description": "Workspace scope and canonical folder path to create.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTableFolderRequest" } } } }, "responses": { "201": { "description": "The created table folder.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2CreateTableFolderResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "patch": { "operationId": "relocateTablesFolder", "summary": "Rename or Move Folder", "description": "Rename or move a table folder and update all descendant paths.", "tags": ["Tables"], "requestBody": { "required": true, "description": "Workspace scope, current canonical path, and destination path.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RelocateTableFolderRequest" } } } }, "responses": { "200": { "description": "The relocated table folder.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2RelocateTableFolderResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } }, "delete": { "operationId": "deleteTablesFolder", "summary": "Delete Folder", "description": "Delete an empty table folder, or recursively delete its descendants and tables when explicitly requested.", "tags": ["Tables"], "parameters": [ { "name": "workspaceId", "in": "query", "required": true, "description": "Workspace containing the folder.", "schema": { "type": "string", "minLength": 1, "description": "Workspace containing the folder." } }, { "name": "path", "in": "query", "required": true, "description": "Path of the folder to delete.", "schema": { "description": "Path of the folder to delete.", "type": "string" } }, { "name": "recursive", "in": "query", "required": false, "description": "Delete nested files and folders when true.", "schema": { "description": "Delete nested files and folders when true.", "default": "false", "type": "string" } } ], "responses": { "200": { "description": "Table-folder deletion acknowledgement.", "headers": { "X-RateLimit-Limit": { "$ref": "#/components/headers/X-RateLimit-Limit" }, "X-RateLimit-Remaining": { "$ref": "#/components/headers/X-RateLimit-Remaining" }, "X-RateLimit-Reset": { "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2DeleteTableFolderResponse" } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/NotFound" }, "409": { "$ref": "#/components/responses/Conflict" }, "423": { "$ref": "#/components/responses/Locked" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/InternalError" }, "503": { "$ref": "#/components/responses/ServiceUnavailable" } } } } }, "components": { "securitySchemes": { "apiKey": { "type": "apiKey", "in": "header", "name": "X-API-Key", "description": "Your Sim API key (personal or workspace). Generate one from the Sim dashboard under Settings > API Keys." } }, "headers": { "X-RateLimit-Limit": { "description": "Maximum requests allowed in the current window.", "schema": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "title": "Rate limit", "description": "Maximum requests allowed in the current window." } }, "X-RateLimit-Remaining": { "description": "Requests remaining in the current window.", "schema": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "title": "Rate limit remaining", "description": "Requests remaining in the current window." } }, "X-RateLimit-Reset": { "description": "ISO 8601 timestamp when the current rate-limit window resets.", "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "title": "Rate limit reset", "description": "ISO 8601 timestamp when the current rate-limit window resets." } }, "Retry-After": { "description": "Seconds to wait before retrying a rate-limited request.", "schema": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "title": "Retry after", "description": "Seconds to wait before retrying a rate-limited request." } }, "X-Run-Id": { "description": "Identifier assigned to the workflow run.", "schema": { "type": "string", "minLength": 1, "title": "Run identifier", "description": "Identifier assigned to the workflow run." } } }, "responses": { "BadRequest": { "description": "The request is invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "Unauthorized": { "description": "The API key is missing or invalid.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "UsageLimitExceeded": { "description": "The workspace has exceeded its usage or billing limits.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "Forbidden": { "description": "The caller lacks access to the resource.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "NotFound": { "description": "The requested resource was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "Conflict": { "description": "The request conflicts with current resource state.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "RunIdConflict": { "description": "The run identifier is already associated with a different request.", "headers": { "X-Run-Id": { "$ref": "#/components/headers/X-Run-Id" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "Gone": { "description": "The requested generated resource has expired.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "PayloadTooLarge": { "description": "The request body exceeds the allowed size.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "UnsupportedMediaType": { "description": "The request uses an unsupported media type.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "Locked": { "description": "The resource is locked and cannot be modified.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "RateLimited": { "description": "The caller exceeded the request rate limit.", "headers": { "Retry-After": { "$ref": "#/components/headers/Retry-After" } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "InternalError": { "description": "An unexpected server error occurred.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } }, "ServiceUnavailable": { "description": "A required service is temporarily unavailable.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/V2Error" } } } } }, "schemas": { "V2Error": { "type": "object", "properties": { "error": { "type": "object", "properties": { "code": { "type": "string", "description": "Stable machine-readable error code." }, "message": { "type": "string", "description": "Human-readable explanation of the error." }, "details": { "description": "Optional structured error details." } }, "required": ["code", "message"], "additionalProperties": false, "description": "Canonical error details." } }, "required": ["error"], "additionalProperties": false, "title": "v2 error response", "description": "Canonical error envelope returned by the public v2 API.", "examples": [ { "error": { "code": "BAD_REQUEST", "message": "The request is invalid." } } ] }, "V2ApiTable": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique table identifier." }, "name": { "type": "string", "description": "Table name." }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Table description, or null when none is set." }, "ownerEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", "description": "Current email address of the table owner.", "examples": ["owner@example.com"] }, "schema": { "type": "object", "properties": { "columns": { "type": "array", "items": { "type": "object", "properties": { "id": { "description": "Stable server-assigned column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name used as the public row-data key." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Data type of values stored in the column." }, "required": { "default": false, "description": "Whether inserts require a value for this column.", "type": "boolean" }, "unique": { "default": false, "description": "Whether values must be unique across table rows.", "type": "boolean" }, "workflowGroupId": { "description": "Workflow group whose output populates this column.", "type": "string" }, "options": { "description": "Options declared for a select column.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"], "additionalProperties": false } }, "multiple": { "description": "Whether a select column accepts multiple options.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for a currency column, normalized to uppercase.", "type": "string", "pattern": "^[A-Za-z]{3}$" } }, "required": ["name", "type", "required", "unique"], "additionalProperties": false, "description": "A typed column in a table schema." }, "description": "Table column definitions." } }, "required": ["columns"], "additionalProperties": false, "description": "Typed table schema." }, "rowCount": { "type": "number", "description": "Current number of rows in the table." }, "maxRows": { "type": "number", "description": "Maximum rows allowed by the workspace plan." }, "folderPath": { "type": "string", "description": "Canonical slash-prefixed folder path. `/` is the workspace root." }, "locks": { "type": "object", "properties": { "schemaLocked": { "type": "boolean", "description": "Whether column-schema changes are locked." }, "insertLocked": { "type": "boolean", "description": "Whether row insertion is locked." }, "updateLocked": { "type": "boolean", "description": "Whether row updates are locked." }, "deleteLocked": { "type": "boolean", "description": "Whether row and table deletion is locked." } }, "required": ["schemaLocked", "insertLocked", "updateLocked", "deleteLocked"], "additionalProperties": false, "description": "Read-only table governance locks." }, "job": { "anyOf": [ { "$ref": "#/components/schemas/V2TableJobState" }, { "type": "null" } ], "description": "Current background job, or null when idle." }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp when the table was created." }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp when the table was last modified." } }, "required": [ "id", "name", "description", "ownerEmail", "schema", "rowCount", "maxRows", "folderPath", "locks", "job", "createdAt", "updatedAt" ], "additionalProperties": false, "title": "Table", "description": "A user-defined table with typed columns and governance state." }, "V2TableJobState": { "type": "object", "properties": { "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Background job identifier, or null when unavailable." }, "type": { "anyOf": [ { "type": "string", "enum": ["import", "delete", "export", "backfill", "update"] }, { "type": "null" } ], "description": "Kind of background table work." }, "status": { "type": "string", "enum": ["running", "ready", "failed", "canceled"], "description": "Current background job state." }, "rowsProcessed": { "type": "number", "description": "Number of rows processed by the job." }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Failure reason, or null when the job has not failed." } }, "required": ["id", "type", "status", "rowsProcessed", "error"], "additionalProperties": false, "title": "Table job state", "description": "Current background work associated with a table." }, "V2TableListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2ApiTable" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Table list response", "description": "A cursor-paginated page of tables." }, "V2TableData": { "type": "object", "properties": { "table": { "description": "The requested table.", "$ref": "#/components/schemas/V2ApiTable" } }, "required": ["table"], "additionalProperties": false, "title": "Table data", "description": "A single table payload." }, "V2CreateTableResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableData" } }, "required": ["data"], "additionalProperties": false, "title": "Create table response", "description": "The created table." }, "CreateTableRequest": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Table name." }, "description": { "description": "Optional table description.", "type": "string", "maxLength": 500 }, "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "schema": { "type": "object", "properties": { "columns": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "type": "object", "properties": { "id": { "description": "Optional client-provided column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Column data type." }, "unique": { "description": "Whether values in the column must be unique.", "type": "boolean" }, "options": { "description": "Select options for select-type columns.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"] } }, "multiple": { "description": "Whether a select column accepts multiple values.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for currency columns.", "type": "string", "pattern": "^[A-Za-z]{3}$" }, "workflowGroupId": { "description": "Workflow group initially associated with the column.", "type": "string" } }, "required": ["name", "type"], "additionalProperties": false }, "description": "Initial table columns." } }, "required": ["columns"], "additionalProperties": false, "description": "Initial table column definitions." }, "folderPath": { "description": "Folder in which to create the table.", "type": "string" } }, "required": ["name", "workspaceId", "schema"], "additionalProperties": false, "title": "Create table request", "description": "Workspace, table metadata, folder placement, and typed columns." }, "V2TableResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableData" } }, "required": ["data"], "additionalProperties": false, "title": "Table response", "description": "A single table." }, "V2DeleteTableData": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the deleted table." }, "deleted": { "type": "boolean", "const": true, "description": "Confirms that the table was deleted." } }, "required": ["id", "deleted"], "additionalProperties": false, "title": "Delete table data", "description": "Table deletion acknowledgement." }, "V2DeleteTableResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteTableData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table response", "description": "Table deletion acknowledgement." }, "V2UpdateTableResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableData" } }, "required": ["data"], "additionalProperties": false, "title": "Update table response", "description": "The updated table." }, "UpdateTableRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "name": { "description": "Replacement table name.", "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$" }, "description": { "anyOf": [ { "description": "Optional table description.", "type": "string", "maxLength": 500 }, { "type": "null" } ], "description": "Replacement table description, or null to clear it." }, "folderPath": { "description": "Folder path. A missing leading slash is normalized before validation.", "type": "string" } }, "required": ["workspaceId"], "additionalProperties": false, "title": "Update table request", "description": "Workspace scope and one or more table metadata or placement changes." }, "V2TableColumnsData": { "type": "object", "properties": { "columns": { "type": "array", "items": { "type": "object", "properties": { "id": { "description": "Stable server-assigned column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name used as the public row-data key." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Data type of values stored in the column." }, "required": { "default": false, "description": "Whether inserts require a value for this column.", "type": "boolean" }, "unique": { "default": false, "description": "Whether values must be unique across table rows.", "type": "boolean" }, "workflowGroupId": { "description": "Workflow group whose output populates this column.", "type": "string" }, "options": { "description": "Options declared for a select column.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"], "additionalProperties": false } }, "multiple": { "description": "Whether a select column accepts multiple options.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for a currency column, normalized to uppercase.", "type": "string", "pattern": "^[A-Za-z]{3}$" } }, "required": ["name", "type", "required", "unique"], "additionalProperties": false, "description": "A typed column in a table schema." }, "description": "Current table columns." } }, "required": ["columns"], "additionalProperties": false, "title": "Table columns data", "description": "The table column list after a schema mutation." }, "V2TableColumnsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableColumnsData" } }, "required": ["data"], "additionalProperties": false, "title": "Table columns response", "description": "The table column list after a schema mutation." }, "AddTableColumnRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." }, "column": { "type": "object", "properties": { "id": { "description": "Optional client-provided column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Column data type." }, "unique": { "description": "Whether values in the column must be unique.", "type": "boolean" }, "options": { "description": "Select options for select-type columns.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"] } }, "multiple": { "description": "Whether a select column accepts multiple values.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for currency columns.", "type": "string", "pattern": "^[A-Za-z]{3}$" }, "position": { "description": "Zero-based insertion position for the column.", "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": ["name", "type"], "additionalProperties": false, "description": "Column definition to add." } }, "required": ["workspaceId", "column"], "additionalProperties": false, "title": "Add table column request", "description": "Workspace scope and the typed column to add.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "column": { "name": "plan", "type": "string" } } ] }, "UpdateTableColumnRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." }, "columnName": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Current name of the column to update." }, "updates": { "type": "object", "properties": { "name": { "description": "Replacement column name.", "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$" }, "type": { "description": "Replacement column data type.", "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"] }, "unique": { "description": "Whether values in the column must be unique.", "type": "boolean" }, "options": { "description": "Replacement select options for select-type columns.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"] } }, "multiple": { "description": "Whether a select column accepts multiple values.", "type": "boolean" }, "currencyCode": { "description": "Replacement ISO 4217 code for a currency column.", "type": "string", "pattern": "^[A-Za-z]{3}$" } }, "additionalProperties": false, "description": "Mutable column fields." } }, "required": ["workspaceId", "columnName", "updates"], "additionalProperties": false, "title": "Update table column request", "description": "Workspace scope, current column name, and fields to update.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "columnName": "plan", "updates": { "name": "subscriptionPlan" } } ] }, "DeleteTableColumnRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "columnName": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Name of the column to delete." } }, "required": ["workspaceId", "columnName"], "title": "Delete table column request", "description": "Workspace scope and column name to delete.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "columnName": "legacyStatus" } ] }, "V2ApiTableRow": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique row identifier." }, "data": { "description": "Row cells keyed by column name.", "$ref": "#/components/schemas/V2TableRowData" }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp when the row was created." }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp when the row was last modified." } }, "required": ["id", "data", "createdAt", "updatedAt"], "additionalProperties": false, "title": "Table row", "description": "A table row with user-defined cell values." }, "V2TableRowData": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "description": "User-defined cell value interpreted by its column definition." }, "description": "User-defined row cells keyed by column name.", "title": "Table row data", "examples": [ { "email": "jane@example.com", "name": "Jane Doe", "age": 30 } ] }, "V2TableRowListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2ApiTableRow" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Table row list response", "description": "A cursor-paginated page of table rows." }, "V2CreateSingleTableRowResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableRowPayload" } }, "required": ["data"], "additionalProperties": false, "title": "Create single table row response", "description": "Response returned after inserting one table row." }, "V2TableRowPayload": { "type": "object", "properties": { "row": { "description": "The requested table row.", "$ref": "#/components/schemas/V2ApiTableRow" } }, "required": ["row"], "additionalProperties": false, "title": "Table row payload", "description": "A single table row payload." }, "V2CreateBatchTableRowsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2BatchInsertRowsData" } }, "required": ["data"], "additionalProperties": false, "title": "Create batch table rows response", "description": "Response returned after inserting a batch of table rows." }, "V2BatchInsertRowsData": { "type": "object", "properties": { "rows": { "type": "array", "items": { "$ref": "#/components/schemas/V2ApiTableRow" }, "description": "Inserted table rows." }, "insertedCount": { "type": "number", "description": "Number of inserted rows." } }, "required": ["rows", "insertedCount"], "additionalProperties": false, "title": "Batch insert rows data", "description": "Rows created by a batch insert." }, "V2CreateTableRowsResponse": { "anyOf": [ { "$ref": "#/components/schemas/V2CreateSingleTableRowResponse" }, { "$ref": "#/components/schemas/V2CreateBatchTableRowsResponse" } ], "title": "Create table rows response", "description": "The inserted single row or inserted batch result." }, "CreateTableRowsRequest": { "anyOf": [ { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "rows": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "$ref": "#/components/schemas/V2TableRowData" }, "description": "Rows to insert, with cells keyed by column name." } }, "required": ["workspaceId", "rows"] }, { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "data": { "description": "Row cells keyed by column name.", "$ref": "#/components/schemas/V2TableRowData" }, "__privateSecretProvenance": { "description": "Private encrypted secret provenance for trusted internal callers.", "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Private provenance bundle format version." }, "complete": { "type": "boolean", "description": "Whether the private provenance bundle is complete." }, "selections": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "minLength": 1, "maxLength": 4096, "description": "Selection key carrying provenance." }, "provenance": { "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Secret provenance format version." }, "complete": { "type": "boolean", "description": "Whether the provenance trace is complete." }, "entries": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "encryptedValue": { "type": "string", "minLength": 1, "maxLength": 8388608, "description": "Encrypted secret value carried across the trusted execution boundary." }, "name": { "description": "Optional source secret name.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["encryptedValue"], "additionalProperties": false }, "description": "Encrypted secret provenance entries." }, "scope": { "description": "Authorization scope bound to the encrypted provenance.", "type": "object", "properties": { "userId": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "User scope for the encrypted provenance." }, "workspaceId": { "description": "Optional workspace scope for the encrypted provenance.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["userId"], "additionalProperties": false } }, "required": ["version", "complete", "entries"], "additionalProperties": false, "description": "Encrypted provenance for this selection." } }, "required": ["key", "provenance"], "additionalProperties": false }, "description": "Selections and their encrypted provenance." } }, "required": ["version", "complete", "selections"], "additionalProperties": false }, "afterRowId": { "description": "Row after which to insert the new row.", "type": "string", "minLength": 1 }, "beforeRowId": { "description": "Row before which to insert the new row.", "type": "string", "minLength": 1 } }, "required": ["workspaceId", "data"] } ], "title": "Create table rows request", "description": "A single row or bounded row batch keyed by column name.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "data": { "email": "jane@example.com", "status": "active" } } ] }, "V2UpdateRowsData": { "type": "object", "properties": { "updatedCount": { "type": "number", "description": "Number of updated rows." }, "updatedRowIds": { "type": "array", "items": { "type": "string" }, "description": "Identifiers of updated rows." } }, "required": ["updatedCount", "updatedRowIds"], "additionalProperties": false, "title": "Update rows data", "description": "Result of a bulk row update." }, "V2UpdateTableRowsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2UpdateRowsData" } }, "required": ["data"], "additionalProperties": false, "title": "Update table rows response", "description": "Updated row count and identifiers." }, "UpdateTableRowsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "filter": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "data": { "description": "Row-data patch applied to every matching row.", "$ref": "#/components/schemas/V2TableRowData" }, "limit": { "description": "Maximum matching rows to update.", "type": "integer", "minimum": 1, "maximum": 1000 }, "__privateSecretProvenance": { "description": "Private encrypted secret provenance for trusted internal callers.", "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Private provenance bundle format version." }, "complete": { "type": "boolean", "description": "Whether the private provenance bundle is complete." }, "selections": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "minLength": 1, "maxLength": 4096, "description": "Selection key carrying provenance." }, "provenance": { "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Secret provenance format version." }, "complete": { "type": "boolean", "description": "Whether the provenance trace is complete." }, "entries": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "encryptedValue": { "type": "string", "minLength": 1, "maxLength": 8388608, "description": "Encrypted secret value carried across the trusted execution boundary." }, "name": { "description": "Optional source secret name.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["encryptedValue"], "additionalProperties": false }, "description": "Encrypted secret provenance entries." }, "scope": { "description": "Authorization scope bound to the encrypted provenance.", "type": "object", "properties": { "userId": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "User scope for the encrypted provenance." }, "workspaceId": { "description": "Optional workspace scope for the encrypted provenance.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["userId"], "additionalProperties": false } }, "required": ["version", "complete", "entries"], "additionalProperties": false, "description": "Encrypted provenance for this selection." } }, "required": ["key", "provenance"], "additionalProperties": false }, "description": "Selections and their encrypted provenance." } }, "required": ["version", "complete", "selections"], "additionalProperties": false } }, "required": ["workspaceId", "filter", "data"], "title": "Update table rows request", "description": "Workspace scope, typed predicate, and row-data patch." }, "V2DeleteRowsData": { "type": "object", "properties": { "deletedCount": { "type": "number", "description": "Number of deleted rows." }, "deletedRowIds": { "type": "array", "items": { "type": "string" }, "description": "Identifiers of deleted rows." }, "requestedCount": { "description": "Number of row identifiers requested.", "type": "number" }, "missingRowIds": { "description": "Requested row identifiers not found.", "type": "array", "items": { "type": "string" } } }, "required": ["deletedCount", "deletedRowIds"], "additionalProperties": false, "title": "Delete rows data", "description": "Result of a bulk row deletion." }, "V2DeleteTableRowsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteRowsData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table rows response", "description": "Deleted row counts, identifiers, and optional missing identifiers." }, "DeleteTableRowsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "filter": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "limit": { "description": "Maximum matching rows to delete.", "type": "integer", "minimum": 1, "maximum": 1000 }, "rowIds": { "description": "Explicit row identifiers to delete.", "minItems": 1, "maxItems": 1000, "type": "array", "items": { "type": "string", "minLength": 1 } } }, "required": ["workspaceId"], "title": "Delete table rows request", "description": "Workspace scope and exactly one of a predicate or row identifier list.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "rowIds": ["row_1f3e5d7c9b8a4c2d806e4a6b8d0f2e93"] } ] }, "V2TableRowResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableRowPayload" } }, "required": ["data"], "additionalProperties": false, "title": "Table row response", "description": "A single table row." }, "UpdateTableRowRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "data": { "description": "Partial row-data patch keyed by column name.", "$ref": "#/components/schemas/V2TableRowData" }, "__privateSecretProvenance": { "description": "Private encrypted secret provenance for trusted internal callers.", "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Private provenance bundle format version." }, "complete": { "type": "boolean", "description": "Whether the private provenance bundle is complete." }, "selections": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "minLength": 1, "maxLength": 4096, "description": "Selection key carrying provenance." }, "provenance": { "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Secret provenance format version." }, "complete": { "type": "boolean", "description": "Whether the provenance trace is complete." }, "entries": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "encryptedValue": { "type": "string", "minLength": 1, "maxLength": 8388608, "description": "Encrypted secret value carried across the trusted execution boundary." }, "name": { "description": "Optional source secret name.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["encryptedValue"], "additionalProperties": false }, "description": "Encrypted secret provenance entries." }, "scope": { "description": "Authorization scope bound to the encrypted provenance.", "type": "object", "properties": { "userId": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "User scope for the encrypted provenance." }, "workspaceId": { "description": "Optional workspace scope for the encrypted provenance.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["userId"], "additionalProperties": false } }, "required": ["version", "complete", "entries"], "additionalProperties": false, "description": "Encrypted provenance for this selection." } }, "required": ["key", "provenance"], "additionalProperties": false }, "description": "Selections and their encrypted provenance." } }, "required": ["version", "complete", "selections"], "additionalProperties": false } }, "required": ["workspaceId", "data"], "title": "Update table row request", "description": "Workspace scope and row-data patch keyed by column name.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "data": { "status": "active" } } ] }, "V2DeleteRowData": { "type": "object", "properties": { "deletedCount": { "type": "number", "description": "Number of deleted rows." }, "deletedRowIds": { "type": "array", "items": { "type": "string" }, "description": "Identifier of the deleted row." } }, "required": ["deletedCount", "deletedRowIds"], "additionalProperties": false, "title": "Delete row data", "description": "Result of a single-row deletion." }, "V2DeleteTableRowResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteRowData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table row response", "description": "Deleted row count and identifier." }, "V2UpsertRowData": { "type": "object", "properties": { "row": { "description": "The inserted or updated table row.", "$ref": "#/components/schemas/V2ApiTableRow" }, "operation": { "type": "string", "enum": ["insert", "update"], "description": "Whether the row was inserted or updated." } }, "required": ["row", "operation"], "additionalProperties": false, "title": "Upsert row data", "description": "Row returned by an upsert and the operation performed." }, "V2UpsertTableRowResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2UpsertRowData" } }, "required": ["data"], "additionalProperties": false, "title": "Upsert table row response", "description": "The resulting row and whether it was inserted or updated." }, "UpsertTableRowRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "data": { "description": "Row cells keyed by column name.", "$ref": "#/components/schemas/V2TableRowData" }, "conflictTarget": { "description": "Unique column used to detect a conflict.", "type": "string", "minLength": 1 }, "__privateSecretProvenance": { "description": "Private encrypted secret provenance for trusted internal callers.", "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Private provenance bundle format version." }, "complete": { "type": "boolean", "description": "Whether the private provenance bundle is complete." }, "selections": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string", "minLength": 1, "maxLength": 4096, "description": "Selection key carrying provenance." }, "provenance": { "type": "object", "properties": { "version": { "type": "number", "const": 1, "description": "Secret provenance format version." }, "complete": { "type": "boolean", "description": "Whether the provenance trace is complete." }, "entries": { "maxItems": 10000, "type": "array", "items": { "type": "object", "properties": { "encryptedValue": { "type": "string", "minLength": 1, "maxLength": 8388608, "description": "Encrypted secret value carried across the trusted execution boundary." }, "name": { "description": "Optional source secret name.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["encryptedValue"], "additionalProperties": false }, "description": "Encrypted secret provenance entries." }, "scope": { "description": "Authorization scope bound to the encrypted provenance.", "type": "object", "properties": { "userId": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "User scope for the encrypted provenance." }, "workspaceId": { "description": "Optional workspace scope for the encrypted provenance.", "type": "string", "minLength": 1, "maxLength": 1024 } }, "required": ["userId"], "additionalProperties": false } }, "required": ["version", "complete", "entries"], "additionalProperties": false, "description": "Encrypted provenance for this selection." } }, "required": ["key", "provenance"], "additionalProperties": false }, "description": "Selections and their encrypted provenance." } }, "required": ["version", "complete", "selections"], "additionalProperties": false } }, "required": ["workspaceId", "data"], "title": "Upsert table row request", "description": "Workspace scope, row data, and optional unique-column conflict target.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "data": { "email": "jane@example.com", "status": "active" }, "conflictTarget": "email" } ] }, "V2QueryTableRowsResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2ApiTableRow" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Query table rows response", "description": "A cursor-paginated page of matching table rows." }, "QueryTableRowsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "predicate": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "sort": { "description": "Ordered table-row sort specification.", "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"] } }, "limit": { "description": "Maximum rows to return; zero requests an unbounded result.", "type": "integer", "minimum": 0, "maximum": 1000 }, "cursor": { "description": "Opaque cursor returned by the previous query page.", "type": "string", "minLength": 1 } }, "required": ["workspaceId"], "title": "Query table rows request", "description": "Workspace scope, optional predicate and sort, and cursor pagination controls.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "predicate": { "all": [ { "field": "status", "op": "eq", "value": "active" } ] }, "sort": [ { "field": "createdAt", "direction": "desc" } ], "limit": 100 } ] }, "V2ApiTableView": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique saved-view identifier." }, "tableId": { "type": "string", "description": "Table to which the view belongs." }, "name": { "type": "string", "description": "Saved-view display name." }, "config": { "description": "Saved filter, sort, and column-layout configuration.", "$ref": "#/components/schemas/V2TableViewConfig" }, "isDefault": { "type": "boolean", "description": "Whether this is the table default view." }, "createdByEmail": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "null" } ], "description": "Current author email, or null when removed." }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp when the view was created." }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp when the view was last modified." } }, "required": [ "id", "tableId", "name", "config", "isDefault", "createdByEmail", "createdAt", "updatedAt" ], "additionalProperties": false, "title": "Table view", "description": "A named saved presentation of table rows and columns." }, "V2TableViewConfig": { "type": "object", "properties": { "columnWidths": { "description": "Column widths keyed by stable column identifier.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number", "exclusiveMinimum": 0 } }, "columnOrder": { "description": "Stable column identifiers in display order.", "type": "array", "items": { "type": "string" } }, "pinnedColumns": { "description": "Stable identifiers of pinned columns.", "type": "array", "items": { "type": "string" } }, "hiddenColumns": { "description": "Stable identifiers of hidden columns.", "type": "array", "items": { "type": "string" } }, "filter": { "description": "Saved row predicate, or null when the view is unfiltered.", "anyOf": [ { "description": "Recursive saved predicate tree. Runtime validation uses the canonical predicate schema." }, { "type": "null" } ] }, "sort": { "description": "Saved ordered sort specification, or null for default ordering.", "anyOf": [ { "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"], "additionalProperties": false } }, { "type": "null" } ] } }, "additionalProperties": false, "title": "Table view configuration", "description": "Saved filter, sort, and column-layout settings for a table view." }, "V2TableViewListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2ApiTableView" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Table view list response", "description": "A cursor envelope containing the saved views." }, "V2TableViewData": { "type": "object", "properties": { "view": { "description": "The requested saved table view.", "$ref": "#/components/schemas/V2ApiTableView" } }, "required": ["view"], "additionalProperties": false, "title": "Table view data", "description": "A single saved table-view payload." }, "V2CreateTableViewResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableViewData" } }, "required": ["data"], "additionalProperties": false, "title": "Create table view response", "description": "The created saved view." }, "CreateTableViewRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." }, "name": { "type": "string", "minLength": 1, "description": "Saved-view display name." }, "config": { "type": "object", "properties": { "columnWidths": { "description": "Column widths keyed by stable column identifier.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number", "exclusiveMinimum": 0 } }, "columnOrder": { "description": "Stable column identifiers in display order.", "type": "array", "items": { "type": "string" } }, "pinnedColumns": { "description": "Stable identifiers of pinned columns.", "type": "array", "items": { "type": "string" } }, "hiddenColumns": { "description": "Stable identifiers of hidden columns.", "type": "array", "items": { "type": "string" } }, "filter": { "description": "Saved row predicate, or null when the view is unfiltered.", "anyOf": [ { "description": "Recursive predicate condition or group, normalized to a grouped predicate after validation." }, { "type": "null" } ] }, "sort": { "description": "Saved ordered sort specification, or null for default ordering.", "anyOf": [ { "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"] } }, { "type": "null" } ] } }, "description": "Saved filter, sort, and column-layout configuration." } }, "required": ["workspaceId", "name", "config"], "title": "Create table view request", "description": "Workspace scope, name, and saved filter, sort, and layout configuration." }, "V2TableViewResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableViewData" } }, "required": ["data"], "additionalProperties": false, "title": "Table view response", "description": "A single saved table view." }, "UpdateTableViewRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace that owns the table." }, "name": { "description": "Replacement saved-view display name.", "type": "string", "minLength": 1 }, "config": { "description": "Complete replacement saved-view configuration.", "type": "object", "properties": { "columnWidths": { "description": "Column widths keyed by stable column identifier.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number", "exclusiveMinimum": 0 } }, "columnOrder": { "description": "Stable column identifiers in display order.", "type": "array", "items": { "type": "string" } }, "pinnedColumns": { "description": "Stable identifiers of pinned columns.", "type": "array", "items": { "type": "string" } }, "hiddenColumns": { "description": "Stable identifiers of hidden columns.", "type": "array", "items": { "type": "string" } }, "filter": { "description": "Saved row predicate, or null when the view is unfiltered.", "anyOf": [ { "description": "Recursive predicate condition or group, normalized to a grouped predicate after validation." }, { "type": "null" } ] }, "sort": { "description": "Saved ordered sort specification, or null for default ordering.", "anyOf": [ { "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"] } }, { "type": "null" } ] } } }, "configPatch": { "description": "Saved-view configuration fields to shallow-merge.", "type": "object", "properties": { "columnWidths": { "description": "Column widths keyed by stable column identifier.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number", "exclusiveMinimum": 0 } }, "columnOrder": { "description": "Stable column identifiers in display order.", "type": "array", "items": { "type": "string" } }, "pinnedColumns": { "description": "Stable identifiers of pinned columns.", "type": "array", "items": { "type": "string" } }, "hiddenColumns": { "description": "Stable identifiers of hidden columns.", "type": "array", "items": { "type": "string" } }, "filter": { "description": "Saved row predicate, or null when the view is unfiltered.", "anyOf": [ { "description": "Recursive predicate condition or group, normalized to a grouped predicate after validation." }, { "type": "null" } ] }, "sort": { "description": "Saved ordered sort specification, or null for default ordering.", "anyOf": [ { "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"] } }, { "type": "null" } ] } } }, "isDefault": { "description": "Whether to promote this view to the table default.", "type": "boolean" } }, "required": ["workspaceId"], "title": "Update table view request", "description": "Workspace scope and one or more saved-view changes." }, "V2DeleteTableViewData": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the deleted view." } }, "required": ["id"], "additionalProperties": false, "title": "Delete table view data", "description": "Saved-view deletion acknowledgement." }, "V2DeleteTableViewResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteTableViewData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table view response", "description": "Saved-view deletion acknowledgement." }, "V2TableWorkflowGroup": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique workflow-group identifier." }, "workflowId": { "type": "string", "description": "Backing workflow identifier for a manual group." }, "enrichmentId": { "description": "Registry enrichment identifier.", "type": "string" }, "name": { "description": "Workflow-group display name.", "type": "string" }, "type": { "description": "Producer type.", "type": "string", "enum": ["manual", "enrichment"] }, "dependencies": { "description": "Input column dependencies.", "type": "object", "properties": { "columns": { "description": "Columns required as producer inputs.", "type": "array", "items": { "type": "string" } } }, "additionalProperties": false }, "outputs": { "type": "array", "items": { "type": "object", "properties": { "blockId": { "type": "string", "description": "Workflow block producing this output." }, "path": { "type": "string", "description": "Path to the value in the workflow block output." }, "outputId": { "description": "Registry enrichment output identifier.", "type": "string" }, "columnName": { "type": "string", "description": "Table column receiving the output." } }, "required": ["blockId", "path", "columnName"], "additionalProperties": false }, "description": "Workflow outputs mapped to table columns." }, "inputMappings": { "description": "Workflow inputs mapped from table columns.", "type": "array", "items": { "type": "object", "properties": { "inputName": { "type": "string", "description": "Workflow input name." }, "columnName": { "type": "string", "description": "Source table column name." } }, "required": ["inputName", "columnName"], "additionalProperties": false } }, "deploymentMode": { "description": "Workflow execution mode.", "type": "string", "enum": ["live", "deployed"] }, "autoRun": { "description": "Whether the group automatically runs for new rows.", "type": "boolean" } }, "required": ["id", "workflowId", "outputs"], "additionalProperties": false, "title": "Table workflow group", "description": "A workflow or enrichment producer and the columns it populates." }, "V2TableWorkflowGroupListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2TableWorkflowGroup" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Table workflow group list response", "description": "A cursor envelope containing the table workflow groups." }, "V2WorkflowGroupData": { "type": "object", "properties": { "group": { "description": "The created or updated workflow group.", "$ref": "#/components/schemas/V2TableWorkflowGroup" }, "columns": { "type": "array", "items": { "type": "object", "properties": { "id": { "description": "Stable server-assigned column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name used as the public row-data key." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Data type of values stored in the column." }, "required": { "default": false, "description": "Whether inserts require a value for this column.", "type": "boolean" }, "unique": { "default": false, "description": "Whether values must be unique across table rows.", "type": "boolean" }, "workflowGroupId": { "description": "Workflow group whose output populates this column.", "type": "string" }, "options": { "description": "Options declared for a select column.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"], "additionalProperties": false } }, "multiple": { "description": "Whether a select column accepts multiple options.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for a currency column, normalized to uppercase.", "type": "string", "pattern": "^[A-Za-z]{3}$" } }, "required": ["name", "type", "required", "unique"], "additionalProperties": false, "description": "A typed column in a table schema." }, "description": "Current table columns after the mutation." } }, "required": ["group", "columns"], "additionalProperties": false, "title": "Workflow group data", "description": "A workflow group and the resulting table columns." }, "V2AddTableWorkflowGroupResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2WorkflowGroupData" } }, "required": ["data"], "additionalProperties": false, "title": "Add table workflow group response", "description": "The workflow group and complete resulting table columns." }, "AddTableWorkflowGroupRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "group": { "type": "object", "properties": { "id": { "description": "Optional client-provided workflow-group identifier.", "type": "string", "minLength": 1 }, "workflowId": { "default": "", "description": "Backing workflow identifier for a manual group.", "type": "string" }, "enrichmentId": { "description": "Registry enrichment identifier.", "type": "string", "minLength": 1 }, "name": { "description": "Workflow-group display name.", "type": "string" }, "type": { "description": "Workflow-group producer type.", "type": "string", "enum": ["manual", "enrichment"] }, "dependencies": { "description": "Producer input dependencies.", "type": "object", "properties": { "columns": { "description": "Columns required as producer inputs.", "type": "array", "items": { "type": "string" } } } }, "outputs": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "blockId": { "default": "", "description": "Workflow block producing this output.", "type": "string" }, "path": { "default": "", "description": "Path to the value in the workflow block output.", "type": "string" }, "outputId": { "description": "Registry enrichment output identifier.", "type": "string" }, "columnName": { "type": "string", "minLength": 1, "description": "Table column receiving the output." } }, "required": ["columnName"] }, "description": "Producer outputs mapped to columns." }, "inputMappings": { "description": "Workflow inputs mapped from table columns.", "type": "array", "items": { "type": "object", "properties": { "inputName": { "type": "string", "minLength": 1, "description": "Workflow input name." }, "columnName": { "type": "string", "minLength": 1, "description": "Source table column name." } }, "required": ["inputName", "columnName"] } }, "deploymentMode": { "description": "Workflow state used for cell runs.", "type": "string", "enum": ["live", "deployed"] }, "autoRun": { "description": "Whether this group automatically runs for new rows.", "type": "boolean" } }, "required": ["outputs"], "description": "Workflow or enrichment producer definition." }, "outputColumns": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "description": "Output column name." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Output column data type." }, "required": { "description": "Whether the output column is required.", "type": "boolean" }, "unique": { "description": "Whether the output column must be unique.", "type": "boolean" } }, "required": ["name", "type"] }, "description": "Columns created for producer outputs." }, "autoRun": { "default": false, "description": "Whether to schedule existing rows after group creation.", "type": "boolean" } }, "required": ["workspaceId", "group", "outputColumns"], "additionalProperties": false, "title": "Add table workflow group request", "description": "Workspace scope, producer definition, and output columns.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "group": { "workflowId": "wf_1b3d5f7a9c2e4680b4d6f8a0c2e4b619", "name": "Enrich company", "outputs": [ { "blockId": "block_lookup", "path": "output.revenue", "columnName": "revenue" } ] }, "outputColumns": [ { "name": "revenue", "type": "number" } ] } ] }, "V2UpdateTableWorkflowGroupResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2WorkflowGroupData" } }, "required": ["data"], "additionalProperties": false, "title": "Update table workflow group response", "description": "The workflow group and complete resulting table columns." }, "UpdateTableWorkflowGroupRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "groupId": { "type": "string", "minLength": 1, "description": "Workflow group to update." }, "workflowId": { "description": "Replacement backing workflow identifier.", "type": "string", "minLength": 1 }, "name": { "description": "Replacement workflow-group display name.", "type": "string" }, "dependencies": { "description": "Replacement input dependencies.", "type": "object", "properties": { "columns": { "description": "Columns required as producer inputs.", "type": "array", "items": { "type": "string" } } } }, "outputs": { "description": "Replacement producer outputs.", "type": "array", "items": { "type": "object", "properties": { "blockId": { "default": "", "description": "Workflow block producing this output.", "type": "string" }, "path": { "default": "", "description": "Path to the value in the workflow block output.", "type": "string" }, "outputId": { "description": "Registry enrichment output identifier.", "type": "string" }, "columnName": { "type": "string", "minLength": 1, "description": "Table column receiving the output." } }, "required": ["columnName"] } }, "newOutputColumns": { "description": "Columns to add for new outputs.", "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "description": "Output column name." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Output column data type." }, "required": { "description": "Whether the output column is required.", "type": "boolean" }, "unique": { "description": "Whether the output column must be unique.", "type": "boolean" } }, "required": ["name", "type"] } }, "mappingUpdates": { "description": "Existing output-column mapping changes.", "type": "array", "items": { "type": "object", "properties": { "columnName": { "type": "string", "minLength": 1, "description": "Existing output column to remap." }, "blockId": { "type": "string", "minLength": 1, "description": "New workflow block producing the value." }, "path": { "type": "string", "minLength": 1, "description": "New path to the workflow output value." } }, "required": ["columnName", "blockId", "path"] } }, "inputMappings": { "description": "Replacement workflow input mappings.", "type": "array", "items": { "type": "object", "properties": { "inputName": { "type": "string", "minLength": 1, "description": "Workflow input name." }, "columnName": { "type": "string", "minLength": 1, "description": "Source table column name." } }, "required": ["inputName", "columnName"] } }, "deploymentMode": { "description": "Replacement workflow execution mode.", "type": "string", "enum": ["live", "deployed"] }, "type": { "description": "Replacement workflow-group producer type.", "type": "string", "enum": ["manual", "enrichment"] }, "autoRun": { "description": "Replacement automatic-run setting.", "type": "boolean" } }, "required": ["workspaceId", "groupId"], "additionalProperties": false, "title": "Update table workflow group request", "description": "Workspace scope, workflow group identifier, and producer changes.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "groupId": "grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204", "name": "Company profile enrichment" } ] }, "V2DeleteWorkflowGroupData": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifier of the deleted workflow group." }, "deleted": { "type": "boolean", "const": true, "description": "Confirms that the workflow group was deleted." }, "columns": { "type": "array", "items": { "type": "object", "properties": { "id": { "description": "Stable server-assigned column identifier.", "type": "string" }, "name": { "type": "string", "minLength": 1, "maxLength": 50, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Column name used as the public row-data key." }, "type": { "type": "string", "enum": ["string", "number", "currency", "boolean", "date", "json", "select"], "description": "Data type of values stored in the column." }, "required": { "default": false, "description": "Whether inserts require a value for this column.", "type": "boolean" }, "unique": { "default": false, "description": "Whether values must be unique across table rows.", "type": "boolean" }, "workflowGroupId": { "description": "Workflow group whose output populates this column.", "type": "string" }, "options": { "description": "Options declared for a select column.", "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "description": "Stable select-option identifier." }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "description": "Display name of the select option." } }, "required": ["id", "name"], "additionalProperties": false } }, "multiple": { "description": "Whether a select column accepts multiple options.", "type": "boolean" }, "currencyCode": { "description": "ISO 4217 code for a currency column, normalized to uppercase.", "type": "string", "pattern": "^[A-Za-z]{3}$" } }, "required": ["name", "type", "required", "unique"], "additionalProperties": false, "description": "A typed column in a table schema." }, "description": "Surviving table columns." } }, "required": ["id", "deleted", "columns"], "additionalProperties": false, "title": "Delete workflow group data", "description": "Workflow-group deletion acknowledgement and surviving columns." }, "V2DeleteTableWorkflowGroupResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteWorkflowGroupData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table workflow group response", "description": "Deletion acknowledgement and surviving table columns." }, "DeleteTableWorkflowGroupRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "groupId": { "type": "string", "minLength": 1, "description": "Workflow group to delete." } }, "required": ["workspaceId", "groupId"], "additionalProperties": false, "title": "Delete table workflow group request", "description": "Workspace scope and workflow group identifier.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "groupId": "grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204" } ] }, "V2RunColumnData": { "type": "object", "properties": { "dispatchId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Background dispatch identifier, or null when execution is inline." } }, "required": ["dispatchId"], "additionalProperties": false, "title": "Run column data", "description": "Acknowledgement for a table column run." }, "V2RunTableColumnsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2RunColumnData" } }, "required": ["data"], "additionalProperties": false, "title": "Run table columns response", "description": "Accepted background dispatch identifier." }, "RunTableColumnsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "groupIds": { "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 }, "description": "Workflow or enrichment groups to run." }, "runMode": { "default": "all", "description": "Whether to run all or only incomplete cells.", "type": "string", "enum": ["all", "incomplete"] }, "rowIds": { "description": "Explicit row subset to run.", "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 } }, "filter": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "excludeRowIds": { "description": "Rows excluded from a select-all run scope.", "maxItems": 10000, "type": "array", "items": { "type": "string", "minLength": 1 } }, "limit": { "description": "Optional cap on eligible rows to run.", "type": "object", "properties": { "type": { "type": "string", "const": "rows", "description": "Unit constrained by the run cap." }, "max": { "type": "integer", "minimum": 1, "maximum": 1000000, "description": "Maximum eligible rows to run." } }, "required": ["type", "max"] } }, "required": ["workspaceId", "groupIds"], "title": "Run table columns request", "description": "Workspace scope, producer groups, execution mode, and optional row scope.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "groupIds": ["grp_5d8b2f0a6c1e4739a8b3d5f7e9c1a204"] } ] }, "V2RunRowEnrichmentResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2RunColumnData" } }, "required": ["data"], "additionalProperties": false, "title": "Run row enrichment response", "description": "Accepted background dispatch identifier." }, "RunRowEnrichmentRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." } }, "required": ["workspaceId"], "title": "Run row enrichment request", "description": "Workspace scope for the row enrichment.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64" } ] }, "V2TableRowMatch": { "type": "object", "properties": { "ordinal": { "type": "number", "description": "Zero-based row index in the filtered and sorted view." }, "rowId": { "type": "string", "description": "Identifier of the matching row." }, "column": { "type": "string", "description": "Column name containing the match." } }, "required": ["ordinal", "rowId", "column"], "additionalProperties": false, "title": "Table row match", "description": "One matching cell returned by a table row search." }, "V2FindRowsData": { "type": "object", "properties": { "matches": { "type": "array", "items": { "$ref": "#/components/schemas/V2TableRowMatch" }, "description": "Matching table cells." }, "truncated": { "type": "boolean", "description": "Whether more matches exist beyond the server cap." } }, "required": ["matches", "truncated"], "additionalProperties": false, "title": "Find rows data", "description": "Matching table cells and truncation state." }, "V2FindTableRowsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2FindRowsData" } }, "required": ["data"], "additionalProperties": false, "title": "Find table rows response", "description": "Matching table cells and truncation state." }, "FindTableRowsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "q": { "type": "string", "minLength": 1, "description": "Case-insensitive cell substring to find." }, "predicate": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "sort": { "description": "Ordered table-row sort specification.", "maxItems": 16, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1, "maxLength": 128, "description": "Column name to sort by." }, "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction for this column." } }, "required": ["field", "direction"] } } }, "required": ["workspaceId", "q"], "title": "Find table rows request", "description": "Workspace scope, substring query, and optional predicate and sort.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "q": "acme", "predicate": { "all": [ { "field": "status", "op": "eq", "value": "active" } ] } } ] }, "V2TableUploadImportSource": { "type": "object", "properties": { "type": { "type": "string", "const": "upload", "description": "Upload-backed import discriminator." }, "name": { "type": "string", "minLength": 1, "maxLength": 255, "description": "CSV filename." }, "contentType": { "type": "string", "minLength": 1, "maxLength": 255, "description": "CSV MIME type." }, "size": { "type": "integer", "minimum": 1, "maximum": 5368709120, "description": "Exact CSV file size in bytes." } }, "required": ["type", "name", "contentType", "size"], "additionalProperties": false, "title": "Upload table import source", "description": "CSV file uploaded through signed transfer instructions." }, "V2UploadBackedTableImport": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique table-import identifier." }, "workspaceId": { "type": "string", "description": "Workspace that owns the import." }, "status": { "type": "string", "enum": [ "uploading", "queued", "processing", "completed", "failed", "canceled", "expired" ], "description": "Current import lifecycle state." }, "source": { "description": "Uploaded CSV source for this import.", "$ref": "#/components/schemas/V2TableUploadImportSource" }, "target": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "new", "description": "Create-new-table target discriminator." }, "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Name of the table to create." }, "folderPath": { "description": "Folder path. A missing leading slash is normalized before validation.", "type": "string" } }, "required": ["type", "name"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "existing", "description": "Existing-table target discriminator." }, "tableId": { "type": "string", "minLength": 1, "description": "Existing target table identifier." }, "mode": { "type": "string", "enum": ["append", "replace"], "description": "Whether to append rows or replace existing rows." } }, "required": ["type", "tableId", "mode"], "additionalProperties": false } ], "description": "New or existing table import target." }, "tableId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Resulting or target table identifier." }, "rowsProcessed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "description": "Rows processed so far." }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Terminal failure reason, or null." }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 creation timestamp." }, "updatedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 last-update timestamp." }, "completedAt": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, { "type": "null" } ], "description": "ISO 8601 completion timestamp, or null." } }, "required": [ "id", "workspaceId", "status", "source", "target", "tableId", "rowsProcessed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false, "title": "Upload-backed table import", "description": "Table import whose CSV source is uploaded through signed transfer instructions." }, "V2PutUploadTransfer": { "type": "object", "properties": { "method": { "type": "string", "const": "put", "description": "Upload strategy discriminator." }, "url": { "type": "string", "format": "uri", "description": "Signed URL to which the file bytes are uploaded." }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" }, "description": "Headers that must be included with the upload request." } }, "required": ["method", "url", "headers"], "additionalProperties": false, "title": "Direct upload transfer", "description": "Instructions for uploading bytes to one signed URL." }, "V2MultipartUploadTransfer": { "type": "object", "properties": { "method": { "type": "string", "const": "multipart", "description": "Upload strategy discriminator." }, "partSize": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991, "description": "Required size of each non-final part in bytes." }, "partCount": { "type": "integer", "exclusiveMinimum": 0, "maximum": 640, "description": "Total number of upload parts." } }, "required": ["method", "partSize", "partCount"], "additionalProperties": false, "title": "Multipart upload transfer", "description": "Instructions for splitting bytes into a multipart upload." }, "V2TableWorkspaceFileImportSource": { "type": "object", "properties": { "type": { "type": "string", "const": "workspace_file", "description": "Workspace-file source discriminator." }, "fileId": { "type": "string", "minLength": 1, "description": "Existing workspace file identifier." } }, "required": ["type", "fileId"], "additionalProperties": false, "title": "Workspace file table import source", "description": "Existing workspace file used as a CSV import source." }, "V2WorkspaceFileTableImport": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique table-import identifier." }, "workspaceId": { "type": "string", "description": "Workspace that owns the import." }, "status": { "type": "string", "enum": [ "uploading", "queued", "processing", "completed", "failed", "canceled", "expired" ], "description": "Current import lifecycle state." }, "source": { "description": "Workspace-file CSV source for this import.", "$ref": "#/components/schemas/V2TableWorkspaceFileImportSource" }, "target": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "new", "description": "Create-new-table target discriminator." }, "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Name of the table to create." }, "folderPath": { "description": "Folder path. A missing leading slash is normalized before validation.", "type": "string" } }, "required": ["type", "name"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "existing", "description": "Existing-table target discriminator." }, "tableId": { "type": "string", "minLength": 1, "description": "Existing target table identifier." }, "mode": { "type": "string", "enum": ["append", "replace"], "description": "Whether to append rows or replace existing rows." } }, "required": ["type", "tableId", "mode"], "additionalProperties": false } ], "description": "New or existing table import target." }, "tableId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Resulting or target table identifier." }, "rowsProcessed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "description": "Rows processed so far." }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Terminal failure reason, or null." }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 creation timestamp." }, "updatedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 last-update timestamp." }, "completedAt": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, { "type": "null" } ], "description": "ISO 8601 completion timestamp, or null." } }, "required": [ "id", "workspaceId", "status", "source", "target", "tableId", "rowsProcessed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false, "title": "Workspace-file table import", "description": "Table import whose CSV source is an existing workspace file." }, "V2CreateTableImportData": { "anyOf": [ { "type": "object", "properties": { "session": { "description": "Created upload-backed import session.", "$ref": "#/components/schemas/V2UploadBackedTableImport" }, "uploadToken": { "type": "string", "minLength": 1, "description": "Signed token for upload control requests." }, "transfer": { "oneOf": [ { "$ref": "#/components/schemas/V2PutUploadTransfer" }, { "$ref": "#/components/schemas/V2MultipartUploadTransfer" } ], "description": "Signed CSV upload instructions." } }, "required": ["session", "uploadToken", "transfer"], "additionalProperties": false }, { "type": "object", "properties": { "session": { "description": "Created workspace-file import session.", "$ref": "#/components/schemas/V2WorkspaceFileTableImport" }, "uploadToken": { "type": "null", "description": "Always null for workspace-file imports." }, "transfer": { "type": "null", "description": "Always null for workspace-file imports." } }, "required": ["session", "uploadToken", "transfer"], "additionalProperties": false } ], "title": "Create table import data", "description": "Created import session and upload instructions when the source needs transfer." }, "V2CreateTableImportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2CreateTableImportData" } }, "required": ["data"], "additionalProperties": false, "title": "Create table import response", "description": "The import session and upload instructions when transfer is required." }, "CreateTableImportRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "source": { "oneOf": [ { "$ref": "#/components/schemas/V2TableUploadImportSource" }, { "$ref": "#/components/schemas/V2TableWorkspaceFileImportSource" } ], "description": "CSV source for the import." }, "target": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "new", "description": "Create-new-table target discriminator." }, "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Name of the table to create." }, "folderPath": { "description": "Folder path. A missing leading slash is normalized before validation.", "type": "string" } }, "required": ["type", "name"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "existing", "description": "Existing-table target discriminator." }, "tableId": { "type": "string", "minLength": 1, "description": "Existing target table identifier." }, "mode": { "type": "string", "enum": ["append", "replace"], "description": "Whether to append rows or replace existing rows." } }, "required": ["type", "tableId", "mode"], "additionalProperties": false } ], "description": "New or existing table import target." }, "mapping": { "description": "CSV headers mapped to existing table columns.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 50 }, "additionalProperties": { "anyOf": [ { "type": "string", "minLength": 1, "maxLength": 50 }, { "type": "null" } ] } }, "createColumns": { "description": "CSV headers for which new columns should be created.", "maxItems": 1000, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 50 } }, "timezone": { "description": "IANA timezone used to interpret local date values.", "type": "string" } }, "required": ["workspaceId", "source", "target"], "additionalProperties": false, "title": "Create table import request", "description": "Workspace, CSV source, target table, optional mapping, and timezone." }, "V2TableImport": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique table-import identifier." }, "workspaceId": { "type": "string", "description": "Workspace that owns the import." }, "status": { "type": "string", "enum": [ "uploading", "queued", "processing", "completed", "failed", "canceled", "expired" ], "description": "Current import lifecycle state." }, "source": { "oneOf": [ { "$ref": "#/components/schemas/V2TableUploadImportSource" }, { "$ref": "#/components/schemas/V2TableWorkspaceFileImportSource" } ], "description": "CSV source for the import." }, "target": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "new", "description": "Create-new-table target discriminator." }, "name": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[a-z_][a-z0-9_]*$", "description": "Name of the table to create." }, "folderPath": { "description": "Folder path. A missing leading slash is normalized before validation.", "type": "string" } }, "required": ["type", "name"], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "existing", "description": "Existing-table target discriminator." }, "tableId": { "type": "string", "minLength": 1, "description": "Existing target table identifier." }, "mode": { "type": "string", "enum": ["append", "replace"], "description": "Whether to append rows or replace existing rows." } }, "required": ["type", "tableId", "mode"], "additionalProperties": false } ], "description": "New or existing table import target." }, "tableId": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Resulting or target table identifier." }, "rowsProcessed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "description": "Rows processed so far." }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Terminal failure reason, or null." }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 creation timestamp." }, "updatedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 last-update timestamp." }, "completedAt": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, { "type": "null" } ], "description": "ISO 8601 completion timestamp, or null." } }, "required": [ "id", "workspaceId", "status", "source", "target", "tableId", "rowsProcessed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false, "title": "Table import", "description": "Durable CSV table-import lifecycle resource." }, "V2TableImportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableImport" } }, "required": ["data"], "additionalProperties": false, "title": "Table import response", "description": "A durable table-import lifecycle resource." }, "V2CancelTableImportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableImport" } }, "required": ["data"], "additionalProperties": false, "title": "Cancel table import response", "description": "The canceled table-import lifecycle resource." }, "V2UploadPartUrl": { "type": "object", "properties": { "partNumber": { "type": "integer", "minimum": 1, "maximum": 9007199254740991, "description": "Multipart part number." }, "url": { "type": "string", "format": "uri", "description": "Signed URL for this upload part." }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" }, "description": "Headers that must be included with the part upload." }, "expiresAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 expiration time for the signed URL." } }, "required": ["partNumber", "url", "headers", "expiresAt"], "additionalProperties": false, "title": "Upload part URL", "description": "A signed URL and required headers for one multipart upload part." }, "V2PartUrlsData": { "type": "object", "properties": { "parts": { "maxItems": 100, "type": "array", "items": { "$ref": "#/components/schemas/V2UploadPartUrl" }, "description": "Signed URLs for requested parts." } }, "required": ["parts"], "additionalProperties": false, "title": "Upload part URLs", "description": "Signed transfer URLs for the requested multipart upload parts." }, "V2CreateTableImportPartUrlsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2PartUrlsData" } }, "required": ["data"], "additionalProperties": false, "title": "Create table import part URLs response", "description": "Signed URLs and required headers for each requested upload part." }, "CreateTableImportPartUrlsRequest": { "type": "object", "properties": { "partNumbers": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "description": "Multipart part numbers for which signed URLs should be created." } }, "required": ["partNumbers"], "additionalProperties": false, "title": "Create table import part URLs request", "description": "Multipart part numbers for which signed URLs should be created.", "examples": [ { "partNumbers": [1, 2, 3] } ] }, "V2CompleteTableImportUploadResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableImport" } }, "required": ["data"], "additionalProperties": false, "title": "Complete table import upload response", "description": "The import lifecycle resource after processing is queued." }, "V2TableExport": { "type": "object", "properties": { "id": { "type": "string", "description": "Unique table-export identifier." }, "tableId": { "type": "string", "description": "Exported table identifier." }, "workspaceId": { "type": "string", "description": "Workspace that owns the export." }, "format": { "type": "string", "enum": ["csv", "json"], "description": "Export file format." }, "status": { "type": "string", "enum": ["queued", "processing", "completed", "failed", "canceled"], "description": "Current export lifecycle state." }, "rowsProcessed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991, "description": "Rows exported so far." }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Terminal failure reason, or null." }, "createdAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 creation timestamp." }, "updatedAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 last-update timestamp." }, "completedAt": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, { "type": "null" } ], "description": "ISO 8601 completion timestamp, or null." } }, "required": [ "id", "tableId", "workspaceId", "format", "status", "rowsProcessed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false, "title": "Table export", "description": "Durable asynchronous table-export lifecycle resource." }, "V2CreateTableExportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableExport" } }, "required": ["data"], "additionalProperties": false, "title": "Create table export response", "description": "The created durable table-export lifecycle resource." }, "CreateTableExportRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "format": { "default": "csv", "description": "Export file format.", "type": "string", "enum": ["csv", "json"] } }, "required": ["workspaceId"], "title": "Create table export request", "description": "Workspace scope and export format.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "format": "csv" } ] }, "V2TableExportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableExport" } }, "required": ["data"], "additionalProperties": false, "title": "Table export response", "description": "A durable table-export lifecycle resource." }, "V2CancelTableExportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableExport" } }, "required": ["data"], "additionalProperties": false, "title": "Cancel table export response", "description": "The canceled durable table-export lifecycle resource." }, "V2TableExportDownloadData": { "type": "object", "properties": { "url": { "type": "string", "format": "uri", "description": "Short-lived signed download URL." }, "fileName": { "type": "string", "description": "Suggested export filename." }, "expiresAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "description": "ISO 8601 URL expiration timestamp." } }, "required": ["url", "fileName", "expiresAt"], "additionalProperties": false, "title": "Table export download data", "description": "Signed URL and filename for a completed table export." }, "V2DownloadTableExportResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableExportDownloadData" } }, "required": ["data"], "additionalProperties": false, "title": "Download table export response", "description": "Short-lived signed URL, filename, and expiration timestamp." }, "V2CancelTableRunsData": { "type": "object", "properties": { "cancelled": { "type": "number", "description": "Number of cell runs canceled." } }, "required": ["cancelled"], "additionalProperties": false, "title": "Cancel table runs data", "description": "Result of canceling in-flight table cell runs." }, "V2CancelTableRunsResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2CancelTableRunsData" } }, "required": ["data"], "additionalProperties": false, "title": "Cancel table runs response", "description": "Count of canceled table cell runs." }, "CancelTableRunsRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Unique workspace identifier." }, "scope": { "type": "string", "enum": ["all", "row"], "description": "Whether to cancel across the table or one row." }, "rowId": { "description": "Row whose runs should be canceled for row scope.", "type": "string", "minLength": 1 }, "filter": { "description": "Recursive predicate tree with exactly one non-empty `all` or `any` group at each group node." }, "excludeRowIds": { "description": "Rows excluded from an all-scope cancellation.", "maxItems": 10000, "type": "array", "items": { "type": "string", "minLength": 1 } } }, "required": ["workspaceId", "scope"], "title": "Cancel table runs request", "description": "Workspace scope, cancellation scope, and optional predicate or producer groups.", "examples": [ { "workspaceId": "a91c4b2e-6d3f-4e8a-b5c7-0d9e2f1a8c64", "scope": "row", "rowId": "row_1f3e5d7c9b8a4c2d806e4a6b8d0f2e93" } ] }, "V2Folder": { "type": "object", "properties": { "name": { "type": "string", "description": "Folder name." }, "path": { "type": "string", "description": "Canonical folder path used as the public folder identifier." }, "parentPath": { "type": "string", "description": "Canonical parent path; `/` is the root." }, "createdAt": { "type": "string", "description": "ISO 8601 timestamp when the folder was created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "ISO 8601 timestamp when the folder was last updated.", "format": "date-time" } }, "required": ["name", "path", "parentPath", "createdAt", "updatedAt"], "additionalProperties": false, "title": "Folder", "description": "A canonical workspace folder." }, "V2TableFolderListResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/V2Folder" }, "description": "Items in the current page." }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Opaque cursor for the next page, or null when no more items remain." } }, "required": ["data", "nextCursor"], "additionalProperties": false, "title": "Table folder list response", "description": "A cursor envelope containing table folders." }, "V2TableFolderData": { "type": "object", "properties": { "folder": { "description": "The requested table folder.", "$ref": "#/components/schemas/V2Folder" } }, "required": ["folder"], "additionalProperties": false, "title": "Table folder data", "description": "A single table-folder payload." }, "V2CreateTableFolderResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableFolderData" } }, "required": ["data"], "additionalProperties": false, "title": "Create table folder response", "description": "The created table folder." }, "CreateTableFolderRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace in which to create the folder." }, "path": { "description": "Path of the folder to create.", "type": "string" } }, "required": ["workspaceId", "path"], "additionalProperties": false, "title": "Create table folder request", "description": "Workspace scope and canonical folder path to create." }, "V2RelocateTableFolderResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2TableFolderData" } }, "required": ["data"], "additionalProperties": false, "title": "Relocate table folder response", "description": "The relocated table folder." }, "RelocateTableFolderRequest": { "type": "object", "properties": { "workspaceId": { "type": "string", "minLength": 1, "description": "Workspace containing the folder." }, "path": { "description": "Current folder path.", "type": "string" }, "destinationPath": { "description": "New full path for the folder and its descendants.", "type": "string" } }, "required": ["workspaceId", "path", "destinationPath"], "additionalProperties": false, "title": "Relocate table folder request", "description": "Workspace scope, current canonical path, and destination path." }, "V2DeleteTableFolderData": { "type": "object", "properties": { "path": { "type": "string", "description": "Canonical path of the deleted folder." }, "deleted": { "type": "boolean", "const": true, "description": "Confirms that the folder was deleted." }, "deletedItems": { "type": "object", "properties": { "folders": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "Number of deleted folders." }, "tables": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991, "description": "Number of deleted tables." } }, "required": ["folders", "tables"], "additionalProperties": false, "description": "Deleted resource counts." } }, "required": ["path", "deleted", "deletedItems"], "additionalProperties": false, "title": "Delete table folder data", "description": "Folder deletion acknowledgement and deleted-resource counts." }, "V2DeleteTableFolderResponse": { "type": "object", "properties": { "data": { "description": "Response data.", "$ref": "#/components/schemas/V2DeleteTableFolderData" } }, "required": ["data"], "additionalProperties": false, "title": "Delete table folder response", "description": "Folder deletion acknowledgement and deleted resource counts." } } }, "x-generated-by": "scripts/generate-openapi.ts" }