Tables
Tables are the core data structure in Hypertab. Each table has columns (static or smart) and records. Every record automatically gets five system columns: _ht_id, _ht_created_at, _ht_updated_at, _ht_status, _ht_error.
/^[a-z][a-z0-9_]*$/ — lowercase letters, digits, and underscores only, starting with a letter. Names cannot start with _ht_ (reserved for system columns).hypertab_create_view, then customized with field mappings and brand styling in the view studio.List Tables
/v1/tableshypertab_list_tablesReturns all tables in the workspace with record counts, column counts, and descriptions. Soft-deleted tables are excluded.
No parameters required.
{
"tool": "hypertab_list_tables"
}Create Table
/v1/tableshypertab_create_tableCreate a new Table inside an existing Project with one or more columns. The five system columns are added automatically. You can mix static data columns and smart columns in the same call.
| Parameter | Type | Description |
|---|---|---|
project_idrequired | string | ID of the Project that will own the new Table. |
namerequired | string | Table name. Must match /^[a-z][a-z0-9_]*$/. Cannot start with _ht_. Max 64 chars. |
description | string | Human-readable description. Max 500 chars. |
columnsrequired | Column[] | Array of column definitions. Each entry has name (string), type (string), and optional config (object). |
text, number, boolean, email, url, phone, datetime, json, select, multi_select, relation, currency, image_url. For select and multi_select, pass a config object with an options array.Each column definition requires name and type. The optional config object holds type-specific settings like select options or relation targets.
TABLE_ALREADY_EXISTS error.{
"tool": "hypertab_create_table",
"arguments": {
"project_id": "pg_project_123",
"name": "companies",
"description": "Target companies for outreach",
"columns": [
{ "name": "name", "type": "text" },
{ "name": "website", "type": "url" },
{ "name": "employees", "type": "number" },
{ "name": "annual_revenue", "type": "currency" },
{ "name": "industry", "type": "select", "config": { "options": ["SaaS", "Finance", "Healthcare"] } },
{ "name": "tags", "type": "multi_select", "config": { "options": ["enterprise", "mid-market", "startup"] } }
]
}
}201. Reusing the same stable Idempotency-Key with the same payload replays the original result and exact Table identity without creating a duplicate. Reusing that key with a different payload returns IDEMPOTENCY_KEY_REUSED.Get Table Schema
/v1/tables/:tableIdhypertab_get_table_schemaReturns the full schema of a table including all columns, their types, kinds (static or smart), configs, and positions. Use this to understand a table's structure before inserting or querying records.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
_ht_ and cannot be modified.{
"tool": "hypertab_get_table_schema",
"arguments": {
"table": "companies"
}
}Add Column
/v1/tables/:tableId/columnshypertab_add_columnAdd a new static data column to an existing table. For smart columns (HTTP, formula, integration, etc.), use hypertab_add_smart_column instead.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
namerequired | string | Column name. Must match /^[a-z][a-z0-9_]*$/. Cannot start with _ht_. Max 64 chars. |
typerequired | string | One of: text, number, boolean, email, url, phone, datetime, json, select, multi_select, relation, currency, image_url. |
config | object | Type-specific config. For select/multi_select: { options: ["a", "b"] }. For relation: { table: "other_table" }. |
text— free-form stringnumber— numeric valueboolean— true/falseemail— validated email addressurl— validated URL stringphone— phone numberdatetime— ISO 8601 timestampjson— arbitrary JSON objectselect— single choice from options (config: { options: [...] })multi_select— multiple choices from options (config: { options: [...] })relation— link to another table (config: { table: "other_table" })currency— monetary valueimage_url— image URL string
New columns are appended to the end of the table by default. Existing records get null for the new column.
COLUMN_ALREADY_EXISTS error.{
"tool": "hypertab_add_column",
"arguments": {
"table": "companies",
"name": "status",
"type": "select",
"config": {
"options": ["Active", "Churned", "Prospect"]
}
}
}Update Table
/v1/tables/:tableIdhypertab_update_tableRename a table or update its description. At least one of new_name or description must be provided.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Current table name or ID. |
new_name | string | New table name. Must match /^[a-z][a-z0-9_]*$/. Max 64 chars. |
description | string | null | New description. Pass null to clear. |
Renaming a table updates all internal references. Existing webhooks and smart columns that reference this table continue to work because they use the table ID internally.
description: null to clear the description entirely.{
"tool": "hypertab_update_table",
"arguments": {
"table": "companies",
"new_name": "target_accounts",
"description": "Enterprise target accounts for Q2"
}
}Update Column
/v1/tables/:tableId/columns/:columnIdhypertab_update_columnRename a column, change its type, update its config (e.g. select options), or reorder it. All fields are optional — provide only the ones you want to change.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
columnrequired | string | Current column name. |
new_name | string | New column name. Must match /^[a-z][a-z0-9_]*$/. Max 64 chars. |
new_type | string | New column type. One of: text, number, boolean, email, url, phone, datetime, json, select, multi_select, relation, currency, image_url. |
config | object | null | Updated type config (e.g. select options). Pass null to clear. |
position | integer | New display position (0-indexed). |
json to number will set non-numeric values to null. Review your data before changing types.position to reorder columns in the table display. Position is 0-indexed. Other columns shift automatically.{
"tool": "hypertab_update_column",
"arguments": {
"table": "companies",
"column": "employees",
"new_name": "employee_count"
}
}Delete Column
/v1/tables/:tableId/columns/:columnIdhypertab_delete_columnPermanently remove a column from a table. All data in the column is lost. This action cannot be undone. Requires confirm: true as a safety guard.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
columnrequired | string | Column name to delete. |
confirmrequired | boolean | Must be true to confirm deletion. |
_ht_id, _ht_created_at, etc.) cannot be deleted.confirm is missing or false, the request is rejected with a CONFIRMATION_REQUIRED error.{
"tool": "hypertab_delete_column",
"arguments": {
"table": "companies",
"column": "old_notes",
"confirm": true
}
}Delete Table
/v1/tables/:tableIdhypertab_delete_tableSoft-delete a table. The table and all its data are hidden but recoverable for 30 days using hypertab_restore_table. After 30 days, the table is permanently purged. Requires confirm: true.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
confirmrequired | boolean | Must be true to confirm deletion. |
hypertab_list_tables and cannot be queried. Associated webhooks, sources, and smart column runs are paused. Restore within 30 days to recover everything.confirm: true, the request is rejected.{
"tool": "hypertab_delete_table",
"arguments": {
"table": "old_leads",
"confirm": true
}
}Restore Table
/v1/tables/:tableId/restorehypertab_restore_tableRestore a soft-deleted Table and its stored records and columns within the 30-day recovery window. Inspect dependent Sources, webhooks, and workflow runs after restoration; they may remain paused or require repair.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Deleted table name or ID. |
recoverable_until in the delete response for the exact deadline.If a new table with the same name was created after deletion, the restore will fail with a TABLE_ALREADY_EXISTS error. Rename or delete the conflicting table first.
{
"tool": "hypertab_restore_table",
"arguments": {
"table": "old_leads"
}
}Describe Column
/v1/tables/:tableId/columns/:columnId/describehypertab_describe_columnGet data statistics for a column: null count, distinct values, min/max values, and top value distribution. Useful for understanding data quality and distribution before building filters or scoring logic.
| Parameter | Type | Description |
|---|---|---|
tablerequired | string | Table name or ID. |
columnrequired | string | Column name. |
{
"tool": "hypertab_describe_column",
"arguments": {
"table": "companies",
"column": "employees"
}
}