---
name: "tables_create"
area: "tables"
title: "Create a table"
price: "$0.001"
method: "POST"
url: "https://api.conecto.chat/v1/tools/tables_create"
mcp_server: "https://api.conecto.chat/mcp/tables"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/tables/tables_create"
---

# Create a table (`tables_create`)

Creates a table with typed columns: text, numbers with decimals or a currency, checkboxes, dates, choices, emails, links, phone numbers or files.

A table with typed columns: text, long_text, number (with decimals or a currency), checkbox, date, datetime, select and multi_select (with options), email, url, phone, or file (a file_id from the file store). Values are checked against their column on the way in. Up to 100 columns and 100,000 rows.

Price: $0.001 a call. A call that fails costs nothing.

## Use it when

The business tracks something in rows and columns that has no area of its own.

- For customers, companies and deals, use [crm_save_contact](https://conecto.chat/tools/crm/crm_save_contact.md).
- For tasks with statuses and assignees, use [tasks_create](https://conecto.chat/tools/projects/tasks_create.md).
- For stock of the business's products, use [inventory_save_items](https://conecto.chat/tools/inventory/inventory_save_items.md).

## Say this to your agent

> Make us a table to track workshop jobs: order number, customer, bike, the work, due date, status and price.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `name` | string | yes | 1 to 80 characters. |  |  |
| `description` | string | no | Up to 500 characters. |  |  |
| `columns` | array of objects | yes | 1 to 100 items. |  |  |
| `columns[].name` | string | yes, in each item of `columns` | 1 to 60 characters. |  |  |
| `columns[].type` | string | no |  | `"text"`, `"long_text"`, `"number"`, `"checkbox"`, `"date"`, `"datetime"`, `"select"`, `"multi_select"`, `"email"`, `"url"`, `"phone"`, `"file"` | `"text"` |
| `columns[].required` | boolean | no |  |  |  |
| `columns[].options` | array of strings | no | Up to 100 items. |  |  |
| `columns[].decimals` | integer | no | 0 to 6. |  |  |
| `columns[].currency` | string | no | Matches ^[A-Za-z]{3}$. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `tables_create` on the MCP server `https://api.conecto.chat/mcp/tables` with these arguments:

```json
{
  "name": "Workshop jobs",
  "columns": [
    {
      "name": "Order",
      "type": "text",
      "required": true
    },
    {
      "name": "Customer",
      "type": "text"
    },
    {
      "name": "Bike",
      "type": "select",
      "options": [
        "Willamette 8",
        "Tabor gravel",
        "Ladd cargo"
      ]
    },
    {
      "name": "Work",
      "type": "text"
    },
    {
      "name": "Due",
      "type": "date"
    },
    {
      "name": "Status",
      "type": "select",
      "options": [
        "Waiting for parts",
        "On the stand",
        "Ready",
        "Picked up"
      ]
    },
    {
      "name": "Price",
      "type": "number",
      "currency": "USD"
    }
  ]
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/tables_create \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Workshop jobs", "columns": [{"name": "Order", "type": "text", "required": true}, {"name": "Customer", "type": "text"}, {"name": "Bike", "type": "select", "options": ["Willamette 8", "Tabor gravel", "Ladd cargo"]}, {"name": "Work", "type": "text"}, {"name": "Due", "type": "date"}, {"name": "Status", "type": "select", "options": ["Waiting for parts", "On the stand", "Ready", "Picked up"]}, {"name": "Price", "type": "number", "currency": "USD"}]}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "tables_create",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.001",
  "balance_usd": "$19.75",
  "result": {
    "table": {
      "table_id": 4101,
      "name": "Workshop jobs",
      "description": "",
      "rows": 0,
      "columns": [
        {
          "id": "c1",
          "name": "Order",
          "type": "text",
          "required": true
        },
        {
          "id": "c2",
          "name": "Customer",
          "type": "text",
          "required": false
        }
      ]
    }
  }
}
```

`result`: table: its table_id, name, description, row count and columns.

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `invalid_input` | 400 | A column has no name or a name in use, an unknown type, a select without options, or a currency that is not a 3-letter code. | Give each column its own name, a type from the list, and options for select columns. |
| `name_taken` | 409 | A table has that name already. | Pick another name. |
| `limit_reached` | 409 | The business has 50 tables already. | Delete one with tables_delete. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [tables_list](https://conecto.chat/tools/tables/tables_list.md): Every table with its columns and how many rows it has. Free up to 1,000,000 reads a month.
- [tables_change_columns](https://conecto.chat/tools/tables/tables_change_columns.md): Adds, renames or removes columns; rows keep their values through a rename. $0.001 a call.
- [rows_add](https://conecto.chat/tools/tables/rows_add.md): Adds up to 500 rows, each checked against its columns; if one is wrong, none is added. $0.001 per row added.
- [rows_update](https://conecto.chat/tools/tables/rows_update.md): Changes values in up to 500 rows by row number; only the columns given change, and null clears a cell. $0.001 per row changed.
- [rows_upsert](https://conecto.chat/tools/tables/rows_upsert.md): Updates the rows whose key column matches and adds the rest, so a list from anywhere syncs without reading the table first. $0.001 per row added or updated.
- [rows_query](https://conecto.chat/tools/tables/rows_query.md): Rows matching filters, all or any of them, sorted by up to 3 columns, a page at a time. Free up to 1,000,000 reads a month.
- [rows_summarize](https://conecto.chat/tools/tables/rows_summarize.md): Counts rows, and sums, averages, minimums and maximums of number columns, overall and per group, in one call. Free up to 1,000,000 reads a month.
- [rows_delete](https://conecto.chat/tools/tables/rows_delete.md): Deletes rows by their numbers, for good. Free.
- [tables_export](https://conecto.chat/tools/tables/tables_export.md): A CSV of a table, or of the rows matching filters, saved in the file store with a download link. $0.001 a call.
- [tables_import](https://conecto.chat/tools/tables/tables_import.md): Adds the rows of a CSV in the file store to a table, or makes a new table from it. $0.001 per row imported.
- [tables_delete](https://conecto.chat/tools/tables/tables_delete.md): Deletes a table and all its rows, for good. Free.
