Data tables API
Data tables are structured datasets an agent can search — a price list, an inventory feed, an FAQ matrix. Each table becomes a search tool the agent can call. Reading is gated on integrations.read; writing on integrations.write.
List & create
GET /api/v1/rest/datasets
POST /api/v1/rest/datasets
{
"name": "Menu",
"tool_name": "search", // verb the agent tool is built from
"columns": [
{ "key": "item", "searchable": true },
{ "key": "price", "type": "number" }
]
}At least one column must be searchable.
Get, update, delete
GET /api/v1/rest/datasets/:id # schema + live row count
PATCH /api/v1/rest/datasets/:id # edit schema / tool config (slug is immutable)
DELETE /api/v1/rest/datasets/:id # cascades rows — irreversibleRows
GET /api/v1/rest/datasets/:id/rows
POST /api/v1/rest/datasets/:id/rows # upsert: { row_key, data } or bulk { rows, replace? }
DELETE /api/v1/rest/datasets/:id/rows # hard-delete one row by keyAttach to an agent
GET /api/v1/rest/agents/:id/datasets
POST /api/v1/rest/agents/:id/datasets { "dataset_id": "uuid" } // idempotent attach
PATCH /api/v1/rest/agents/:id/datasets/:datasetId { "enabled": false } // toggle without detaching
DELETE /api/v1/rest/agents/:id/datasets/:datasetId // detach (table untouched)Attaching a table gives that agent its search tool. The MCP equivalents are attach_data_table, update_agent_data_table, detach_data_table.
Import / export & ingest webhook
POST /api/v1/rest/datasets/import # from an exported seny-data-table file
GET /api/v1/rest/datasets/:id/export # schema + every row, portable
POST /api/v1/rest/datasets/:id/move { "dest_org_id": "..." } // to a client workspace (white-label)
POST /api/v1/rest/datasets/:id/webhook-token # mint/rotate a per-table ingest token (shown once)
DELETE /api/v1/rest/datasets/:id/webhook-token # disable the ingest webhookFull schemas are in the OpenAPI reference.