API
Tables
The tables API provides project-scoped structured storage for loops, agents, and application code.
Create and inspect a table
POST /v1/projects/{project}/tables
GET /v1/projects/{project}/tables
GET /v1/projects/{project}/tables/{table_id}
PATCH /v1/projects/{project}/tables/{table_id}A table declares a name, optional description and instructions, a column schema, and one required string identity column. Add optional columns later as the data changes. The identity column cannot change after creation because it is the stable key used for upserts.
Write rows
Create, update, upsert, or delete rows with:
POST /v1/projects/{project}/tables/{table_id}/rows
PATCH /v1/projects/{project}/tables/{table_id}/rows/{row_id}
POST /v1/projects/{project}/tables/{table_id}/upsert
DELETE /v1/projects/{project}/tables/{table_id}/rows/{row_id}Rows carry a version for optimistic concurrency. Send the current version on
an update. A stale version returns 409 Conflict instead of overwriting a
newer write.
Use the bulk endpoint when importing several rows in one request:
POST /v1/projects/{project}/tables/{table_id}/bulkQuery and search
Structured queries support equality plus $eq, $ne, $gt, $gte, $lt,
$lte, $in, and $exists operators:
POST /v1/projects/{project}/tables/{table_id}/querySearch uses the same modes as the built-in agent table actions:
POST /v1/projects/{project}/tables/{table_id}/search| Mode | Use when |
|---|---|
keyword | You need predictable token-prefix matches. This is the default. |
semantic | The idea may match even when the exact words do not. |
hybrid | You want keyword precision with semantic recall. |
Semantic and hybrid search require an embedding backend on the deployment.
Events
Row changes emit table.row.inserted, table.row.updated, and
table.row.deleted. These events can start loops or resume a
wait_for_event step.
Next
- Design and inspect shared data in tables.
- Subscribe to row events with the event catalog.
- Inspect schemas in the interactive API reference.